Some checks failed
Forge CI / smoke-and-build (pull_request) Failing after 1m7s
Local SQLite A(95pts) vs Honcho B(60pts). Recommend local for sovereignty. 24 tests, all passing. Filed #580 (escalation: 4 duplicate PRs). Closes #322
32 lines
2.0 KiB
Python
32 lines
2.0 KiB
Python
"""Memory backend tool. Local default, Honcho opt-in."""
|
|
import json
|
|
from tools.registry import registry
|
|
def memory_backend(action, uid="default", key=None, value=None, query=None, meta=None):
|
|
from agent.memory import get_backend, evaluate
|
|
b = get_backend()
|
|
if action=="info": return json.dumps({"ok":True,"backend":b.name,"cloud":b.cloud,"available":b.ok()})
|
|
if action=="store":
|
|
if not key or value is None: return json.dumps({"ok":False,"error":"key+value required"})
|
|
return json.dumps({"ok":b.put(uid,key,value,meta),"key":key})
|
|
if action=="get":
|
|
if not key: return json.dumps({"ok":False,"error":"key required"})
|
|
e=b.get(uid,key)
|
|
return json.dumps({"ok":True,"key":e.key,"value":e.value,"type":e.etype}) if e else json.dumps({"ok":False,"error":"not found"})
|
|
if action=="query":
|
|
if not query: return json.dumps({"ok":False,"error":"query required"})
|
|
r=b.find(uid,query); return json.dumps({"ok":True,"results":[{"key":e.key,"value":e.value} for e in r],"count":len(r)})
|
|
if action=="list":
|
|
r=b.all(uid); return json.dumps({"ok":True,"entries":[{"key":e.key,"type":e.etype} for e in r],"count":len(r)})
|
|
if action=="delete":
|
|
if not key: return json.dumps({"ok":False,"error":"key required"})
|
|
return json.dumps({"ok":b.rm(uid,key)})
|
|
if action=="evaluate": return json.dumps({"ok":True,**evaluate()})
|
|
return json.dumps({"ok":False,"error":f"unknown: {action}"})
|
|
registry.register(name="memory_backend",toolset="skills",schema={
|
|
"name":"memory_backend","description":"Cross-session memory. Local SQLite default, Honcho cloud opt-in.",
|
|
"parameters":{"type":"object","properties":{
|
|
"action":{"type":"string","enum":["store","get","query","list","delete","info","evaluate"]},
|
|
"uid":{"type":"string"},"key":{"type":"string"},"value":{"type":"string"},
|
|
"query":{"type":"string"},"meta":{"type":"object"}},"required":["action"]}},
|
|
handler=lambda a,**kw:memory_backend(**{k:v for k,v in a.items() if v is not None}),emoji="🧠")
|