Fix: Support both memory provider and general plugin contexts
- Check for register_memory_provider() before calling it - Fall back to direct tool registration in general plugin context - Use proper closure to avoid late binding issues with tool names
This commit is contained in:
+29
-2
@@ -410,5 +410,32 @@ class Mem0LocalMemoryProvider(MemoryProvider):
|
|||||||
|
|
||||||
|
|
||||||
def register(ctx) -> None:
|
def register(ctx) -> None:
|
||||||
"""Register Mem0 local as a memory provider plugin."""
|
"""Register Mem0 local as a memory provider plugin.
|
||||||
ctx.register_memory_provider(Mem0LocalMemoryProvider())
|
|
||||||
|
Works in both contexts:
|
||||||
|
- Memory provider context (plugins/memory/) — uses register_memory_provider()
|
||||||
|
- General plugin context (~/.hermes/plugins/) — registers tools directly
|
||||||
|
"""
|
||||||
|
provider = Mem0LocalMemoryProvider()
|
||||||
|
|
||||||
|
# Memory provider context (plugins/memory/ directory)
|
||||||
|
if hasattr(ctx, "register_memory_provider"):
|
||||||
|
ctx.register_memory_provider(provider)
|
||||||
|
return
|
||||||
|
|
||||||
|
# General plugin context (~/.hermes/plugins/ directory)
|
||||||
|
# Register tools manually since we can't register as memory provider
|
||||||
|
from tools.registry import registry
|
||||||
|
|
||||||
|
def make_handler(tool_name: str):
|
||||||
|
"""Create a handler closure for a specific tool."""
|
||||||
|
return lambda args: provider.handle_tool_call(tool_name, args)
|
||||||
|
|
||||||
|
for schema in [PROFILE_SCHEMA, SEARCH_SCHEMA, CONCLUDE_SCHEMA]:
|
||||||
|
registry.register(
|
||||||
|
name=schema["name"],
|
||||||
|
toolset="mem0_local",
|
||||||
|
schema=schema,
|
||||||
|
handler=make_handler(schema["name"]),
|
||||||
|
)
|
||||||
|
logger.debug("Registered tool: %s", schema["name"])
|
||||||
|
|||||||
Reference in New Issue
Block a user