Custom Storage Backend
Chat supports multiple storage backends for persistent memory and session data.Available Storage Providers
- InMemoryStorage: Ephemeral in-memory storage (default)
- SqliteStorage: SQLite database for local persistence
- PostgresStorage: PostgreSQL for production
- MongoStorage: MongoDB for scalable deployments
- RedisStorage: Redis for high-performance caching
- JSONStorage: File-based JSON storage
- Mem0Storage: Mem0 platform for advanced memory management
Using SQLite Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import SqliteStorage
async def main():
# Setup persistent SQLite storage
storage = SqliteStorage(
db_file="chat.db",
sessions_table_name="sessions",
profiles_table_name="profiles"
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using PostgreSQL Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import PostgresStorage
async def main():
# PostgreSQL storage
storage = PostgresStorage(
sessions_table_name="sessions",
profiles_table_name="profiles",
db_url="postgresql://user:pass@localhost:5432/dbname",
schema="public"
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using MongoDB Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import MongoStorage
async def main():
# MongoDB storage
storage = MongoStorage(
db_url="mongodb://localhost:27017",
database_name="chat_db",
sessions_collection_name="sessions",
profiles_collection_name="profiles"
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using Redis Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import RedisStorage
async def main():
# Redis storage with TTL
storage = RedisStorage(
prefix="chat",
host="localhost",
port=6379,
expire=3600 # 1 hour TTL
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using JSON Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import JSONStorage
async def main():
# JSON file-based storage
storage = JSONStorage(
directory_path="./chat_data",
pretty_print=True
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using Mem0 Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import Mem0Storage
async def main():
# Mem0 Platform storage
"""
storage = Mem0Storage(
api_key="your-api-key",
org_id="your-org-id",
project_id="your-project-id",
namespace="upsonic"
)
"""
# Or Mem0 Open Source
storage = Mem0Storage(
local_config={"vector_store": {"provider": "chroma"}},
namespace="upsonic"
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Explain AI")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Using In-Memory Storage
Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import InMemoryStorage
async def main():
# In-memory storage with LRU cache limits
storage = InMemoryStorage(
max_sessions=1000,
max_profiles=100
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Invoke chat
response = await chat.invoke("Hello")
print(response)
if __name__ == "__main__":
asyncio.run(main())
Storage Connection Management
Chat automatically manages storage connections:Copy
import asyncio
from upsonic import Agent, Chat
from upsonic.storage.providers import SqliteStorage
async def main():
# Setup persistent SQLite storage
storage = SqliteStorage(
db_file="chat.db",
sessions_table_name="sessions",
profiles_table_name="profiles"
)
agent = Agent("openai/gpt-4o")
chat = Chat(
session_id="session1",
user_id="user1",
agent=agent,
storage=storage
)
# Storage connection managed automatically
response = await chat.invoke("Hello")
print(response)
# Close connection when done
await chat.close()
if __name__ == "__main__":
asyncio.run(main())

