feat: save full user messages as knowledge entries alongside extracted facts in assistant

This commit is contained in:
2025-11-08 01:25:02 +00:00
parent 49d0afb457
commit 6a69e67e41
5 changed files with 52 additions and 6 deletions
+23
View File
@@ -108,6 +108,9 @@ class Assistant:
self.background_tasks = set()
self.last_result = None
self.init_database()
from rp.memory import KnowledgeStore, FactExtractor
self.knowledge_store = KnowledgeStore(DB_PATH)
self.fact_extractor = FactExtractor()
self.messages.append(init_system_message(args))
try:
from rp.core.enhanced_assistant import EnhancedAssistant
@@ -482,6 +485,26 @@ def process_message(assistant, message):
from rp.core.knowledge_context import inject_knowledge_context
inject_knowledge_context(assistant, message)
# Save the user message as a fact
import time
import uuid
from rp.memory import KnowledgeEntry
categories = assistant.fact_extractor.categorize_content(message)
entry_id = str(uuid.uuid4())[:16]
entry = KnowledgeEntry(
entry_id=entry_id,
category=categories[0] if categories else "user_message",
content=message,
metadata={
"type": "user_message",
"confidence": 1.0,
"source": "user_input",
},
created_at=time.time(),
updated_at=time.time(),
)
assistant.knowledge_store.add_entry(entry)
assistant.messages.append({"role": "user", "content": message})
logger.debug(f"Processing user message: {message[:100]}...")
logger.debug(f"Current message count: {len(assistant.messages)}")
+19 -5
View File
@@ -1,5 +1,6 @@
import json
import logging
import time
import uuid
from typing import Any, Dict, List, Optional
@@ -17,7 +18,7 @@ from rp.config import (
)
from rp.core.advanced_context import AdvancedContextManager
from rp.core.api import call_api
from rp.memory import ConversationMemory, FactExtractor, KnowledgeStore
from rp.memory import ConversationMemory, FactExtractor, KnowledgeStore, KnowledgeEntry
from rp.tools.base import get_tools_definition
from rp.workflows import WorkflowEngine, WorkflowStorage
@@ -132,10 +133,6 @@ class EnhancedAssistant:
facts = self.fact_extractor.extract_facts(user_message)
for fact in facts[:5]:
entry_id = str(uuid.uuid4())[:16]
import time
from rp.memory import KnowledgeEntry
categories = self.fact_extractor.categorize_content(fact["text"])
entry = KnowledgeEntry(
entry_id=entry_id,
@@ -150,6 +147,23 @@ class EnhancedAssistant:
updated_at=time.time(),
)
self.knowledge_store.add_entry(entry)
# Save the entire user message as a fact
entry_id = str(uuid.uuid4())[:16]
categories = self.fact_extractor.categorize_content(user_message)
entry = KnowledgeEntry(
entry_id=entry_id,
category=categories[0] if categories else "user_message",
content=user_message,
metadata={
"type": "user_message",
"confidence": 1.0,
"source": "user_input",
},
created_at=time.time(),
updated_at=time.time(),
)
self.knowledge_store.add_entry(entry)
if self.context_manager and ADVANCED_CONTEXT_ENABLED:
enhanced_messages, context_info = self.context_manager.create_enhanced_context(
self.base.messages, user_message, include_knowledge=True