59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
import json
|
|
import os
|
|
from .base import tool
|
|
|
|
PROJECT_MEMORY_FILE = ".ollama-cli/memory.json"
|
|
|
|
def load_project_memory():
|
|
if os.path.exists(PROJECT_MEMORY_FILE):
|
|
try:
|
|
with open(PROJECT_MEMORY_FILE, 'r') as f:
|
|
return json.load(f)
|
|
except:
|
|
pass
|
|
return {}
|
|
|
|
def save_project_memory(memory):
|
|
os.makedirs(os.path.dirname(PROJECT_MEMORY_FILE), exist_ok=True)
|
|
with open(PROJECT_MEMORY_FILE, 'w') as f:
|
|
json.dump(memory, f, indent=2)
|
|
|
|
@tool(
|
|
name="remember_fact",
|
|
description="Store a key piece of information about the project",
|
|
parameters={
|
|
"fact": {"type": "string", "description": "The fact to remember (e.g., 'API key is in .env', 'Main entry point is src/index.ts')"}
|
|
}
|
|
)
|
|
def remember_fact(fact: str) -> str:
|
|
memory = load_project_memory()
|
|
facts = memory.get("facts", [])
|
|
if fact not in facts:
|
|
facts.append(fact)
|
|
memory["facts"] = facts
|
|
save_project_memory(memory)
|
|
return f"Remembered: {fact}"
|
|
return "Fact already known."
|
|
|
|
@tool(
|
|
name="recall_facts",
|
|
description="Recall all stored facts about the project",
|
|
parameters={}
|
|
)
|
|
def recall_facts() -> str:
|
|
memory = load_project_memory()
|
|
facts = memory.get("facts", [])
|
|
if not facts:
|
|
return "No project facts stored."
|
|
return "Project Facts:\n" + "\n".join(f"- {f}" for f in facts)
|
|
|
|
@tool(
|
|
name="clear_memory",
|
|
description="Clear project memory",
|
|
parameters={}
|
|
)
|
|
def clear_memory() -> str:
|
|
if os.path.exists(PROJECT_MEMORY_FILE):
|
|
os.remove(PROJECT_MEMORY_FILE)
|
|
return "Project memory cleared."
|
|
return "Memory was already empty." |