feat: online-learning router persistence + auto-training via mome_store(query)

- MemoryRouter: save/load SGDClassifier state to disk (pickle + JSON)
- Router saves after every update(), loads on engine init
- MomeEngine.store_fact() accepts optional 'query' param → calls learn()
- extract_and_store() passes user query → trains router automatically
- mome_store tool schema: added optional 'query' parameter
- Router state persists across agent restarts in <store_dir>/_router/
- (router trained) indicator in mome_store response
This commit is contained in:
Emil Shanaty
2026-05-27 00:24:54 +03:00
parent 41509c9172
commit 7501b429f0
2 changed files with 49 additions and 7 deletions
+8 -2
View File
@@ -65,6 +65,10 @@ MEMORY_STORE_SCHEMA = {
"type": "string",
"description": "The fact to remember.",
},
"query": {
"type": "string",
"description": "Optional user query that triggered this fact. Used to train the router (query → expert mapping).",
},
},
"required": ["expert", "fact"],
},
@@ -247,10 +251,12 @@ class MomeProvider(MemoryProvider):
def _handle_store(self, args: Dict[str, Any]) -> str:
expert = args.get("expert", "")
fact = args.get("fact", "")
query = args.get("query", "")
if expert in self._engine.experts and fact:
self._engine.experts[expert].write(fact)
self._engine.store_fact(expert, fact, query)
trained = " (router trained)" if query else ""
return json.dumps({
"result": f"Stored in [{expert}]",
"result": f"Stored in [{expert}]{trained}",
"fact": fact,
})
return json.dumps({