Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from typing import Any | |
| from src.agent.infra.memory_store import LongTermMemoryStore | |
| def build_internal_tools(*, memory_store: LongTermMemoryStore, user_id: str) -> list[Any]: | |
| try: | |
| from langchain_core.tools import tool | |
| except ImportError as exc: | |
| raise RuntimeError( | |
| "langchain-core is not installed. Install dependencies before using /api/material." | |
| ) from exc | |
| def remember_user_fact(fact: str, memory_type: str = "general") -> str: | |
| """Save a durable user fact into long-term memory.""" | |
| memory_id = memory_store.remember_fact( | |
| user_id=user_id, | |
| fact=fact, | |
| memory_type=memory_type, | |
| ) | |
| if not memory_id: | |
| return "No memory saved because the fact was empty." | |
| return f"Saved memory with id {memory_id}." | |
| def recall_user_facts(query: str = "", limit: int = 5) -> str: | |
| """Recall previously saved user facts for personalization.""" | |
| docs = memory_store.recall_user_facts( | |
| user_id=user_id, | |
| query=query, | |
| limit=limit, | |
| ) | |
| if not docs: | |
| return "No memories found for this user." | |
| lines: list[str] = [] | |
| for idx, doc in enumerate(docs, start=1): | |
| metadata = doc.metadata or {} | |
| memory_type = metadata.get("memory_type", "general") | |
| created_at = metadata.get("created_at", "unknown") | |
| lines.append( | |
| f"{idx}. [{memory_type}] ({created_at}) {doc.page_content}" | |
| ) | |
| return "\n".join(lines) | |
| return [remember_user_fact, recall_user_facts] | |