From 1bff6d17d5f8141456019a2dc171bf83c13de631 Mon Sep 17 00:00:00 2001 From: Google AI Agent Date: Mon, 30 Mar 2026 22:28:59 +0000 Subject: [PATCH] feat: enhance Knowledge Ingester with symbolic extraction --- agent/knowledge_ingester.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/agent/knowledge_ingester.py b/agent/knowledge_ingester.py index 786b2a0f..da24c435 100644 --- a/agent/knowledge_ingester.py +++ b/agent/knowledge_ingester.py @@ -1,13 +1,14 @@ """Sovereign Knowledge Ingester for Hermes Agent. Uses Gemini 3.1 Pro to learn from Google Search in real-time and -persists the knowledge to Timmy's sovereign memory. +persists the knowledge to Timmy's sovereign memory (both Markdown and Symbolic). """ import logging import base64 from typing import Any, Dict, List, Optional from agent.gemini_adapter import GeminiAdapter +from agent.symbolic_memory import SymbolicMemory from tools.gitea_client import GiteaClient logger = logging.getLogger(__name__) @@ -16,6 +17,7 @@ class KnowledgeIngester: def __init__(self): self.adapter = GeminiAdapter() self.gitea = GiteaClient() + self.symbolic = SymbolicMemory() def learn_about(self, topic: str) -> str: """Searches Google, analyzes the results, and saves the knowledge.""" @@ -43,12 +45,14 @@ Include: knowledge_fragment = result["text"] - # 2. Persist to Timmy's Memory + # 2. Extract Symbolic Triples + self.symbolic.ingest_text(knowledge_fragment) + + # 3. Persist to Timmy's Memory (Markdown) repo = "Timmy_Foundation/timmy-config" filename = f"memories/realtime_learning/{topic.lower().replace(' ', '_')}.md" try: - # Check if file exists to get SHA sha = None try: existing = self.gitea.get_file(repo, filename) @@ -63,7 +67,7 @@ Include: else: self.gitea.create_file(repo, filename, content_b64, f"Initial knowledge on {topic}") - return f"Successfully learned about {topic} and updated Timmy's memory at {filename}" + return f"Successfully learned about {topic}. Updated Timmy's Markdown memory and Symbolic Knowledge Graph." except Exception as e: logger.error(f"Failed to persist knowledge: {e}") - return f"Learned about {topic}, but failed to save to memory: {e}\n\n{knowledge_fragment}" + return f"Learned about {topic}, but failed to save to Markdown memory: {e}\n\n{knowledge_fragment}"