File size: 1,693 Bytes
62516b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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

    @tool
    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}."

    @tool
    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]