Files
ajarbot/example_usage.py

197 lines
5.1 KiB
Python
Raw Normal View History

"""Example: Using the Memory System with SOUL and User files."""
from memory_system import MemorySystem
def main() -> None:
print("=" * 60)
print("Memory System - SOUL + User Files Example")
print("=" * 60)
memory = MemorySystem()
# 1. SOUL - Define agent personality
print("\n[1] Updating SOUL (Agent Personality)...")
memory.update_soul(
"""
## Additional Traits
- I remember user preferences and adapt
- I maintain context across conversations
- I learn from corrections and feedback
## Goals
- Help users be more productive
- Provide accurate, helpful information
- Build long-term relationships through memory
""",
append=True,
)
# 2. Create user profiles
print("\n[2] Creating user profiles...")
memory.update_user(
"alice",
"""
## Personal Info
- Name: Alice Johnson
- Role: Senior Python Developer
- Timezone: America/New_York (EST)
- Active hours: 9 AM - 6 PM EST
## Preferences
- Communication: Detailed technical explanations
- Code style: PEP 8, type hints, docstrings
- Favorite tools: VS Code, pytest, black
## Current Projects
- Building a microservices architecture
- Learning Kubernetes
- Migrating legacy Django app
## Recent Conversations
- 2026-02-12: Discussed SQLite full-text search implementation
- 2026-02-12: Asked about memory system design patterns
""",
)
memory.update_user(
"bob",
"""
## Personal Info
- Name: Bob Smith
- Role: Frontend Developer
- Timezone: America/Los_Angeles (PST)
- Active hours: 11 AM - 8 PM PST
## Preferences
- Communication: Concise, bullet points
- Code style: ESLint, Prettier, React best practices
- Favorite tools: WebStorm, Vite, TailwindCSS
## Current Projects
- React dashboard redesign
- Learning TypeScript
- Performance optimization work
## Recent Conversations
- 2026-02-11: Asked about React optimization techniques
- 2026-02-12: Discussed Vite configuration
""",
)
# 3. Add long-term memory
print("\n[3] Adding long-term memory...")
memory.write_memory(
"""
# System Architecture Decisions
## Memory System Design
- **Date**: 2026-02-12
- **Decision**: Use SQLite + Markdown for memory
- **Rationale**: Simple, fast, no external dependencies
- **Files**: SOUL.md for personality, users/*.md for user context
## Search Strategy
- FTS5 for keyword search (fast, built-in)
- No vector embeddings (keep it simple)
- Per-user search capability for privacy
""",
daily=False,
)
# 4. Add daily log
print("\n[4] Adding today's notes...")
memory.write_memory(
"""
## Conversations
### Alice (10:30 AM)
- Discussed memory system implementation
- Showed interest in SQLite FTS5 features
- Plans to integrate into her microservices project
### Bob (2:45 PM)
- Quick question about React performance
- Mentioned working late tonight on dashboard
- Prefers short, actionable answers
""",
daily=True,
)
# 5. Perform searches
print("\n[5] Searching memory...")
print("\n -> Global search for 'python':")
results = memory.search("python", max_results=3)
for r in results:
print(f" {r['path']}:{r['start_line']} - {r['snippet']}")
print("\n -> Alice's memory for 'project':")
alice_results = memory.search_user(
"alice", "project", max_results=2
)
for r in alice_results:
print(f" {r['path']}:{r['start_line']} - {r['snippet']}")
print("\n -> Bob's memory for 'React':")
bob_results = memory.search_user("bob", "React", max_results=2)
for r in bob_results:
print(f" {r['path']}:{r['start_line']} - {r['snippet']}")
# 6. Retrieve specific content
print("\n[6] Retrieving specific content...")
soul = memory.get_soul()
print(f"\n SOUL.md ({len(soul)} chars):")
print(" " + "\n ".join(soul.split("\n")[:5]))
print(" ...")
alice_context = memory.get_user("alice")
print(f"\n Alice's profile ({len(alice_context)} chars):")
print(" " + "\n ".join(alice_context.split("\n")[:5]))
print(" ...")
# 7. Show system status
print("\n[7] System Status:")
status = memory.status()
for key, value in status.items():
print(f" {key}: {value}")
print(f"\n Users: {', '.join(memory.list_users())}")
# 8. Demonstrate contextual response
print("\n" + "=" * 60)
print("CONTEXTUAL RESPONSE EXAMPLE")
print("=" * 60)
def get_context_for_user(username: str) -> str:
"""Build context for an AI response."""
user_soul = memory.get_soul()
user_prefs = memory.get_user(username)
recent_memory = memory.search_user(
username, "recent", max_results=2
)
recent_snippet = (
recent_memory[0]["snippet"]
if recent_memory
else "No recent activity"
)
return (
f"\n=== SOUL ===\n{user_soul[:200]}...\n\n"
f"=== USER: {username} ===\n{user_prefs[:200]}...\n\n"
f"=== RECENT CONTEXT ===\n{recent_snippet}\n"
)
print("\nContext for Alice:")
print(get_context_for_user("alice"))
memory.close()
print("\nMemory system closed")
if __name__ == "__main__":
main()