LifeFlow-AI / src /infra /offload_manager.py
Marco310's picture
buildup agent system
b7d08cf
raw
history blame
1.5 kB
import json
import uuid
import sqlite3
from typing import Any, Dict, Optional
class OffloadManager:
"""
負責管理 Tool 之間傳遞的大數據 (Fat Data)。
資料儲存在 SQLite 中,避免污染 LLM Context。
"""
DB_PATH = "storage/offloaded_data.db"
def __init__(self):
self._init_db()
def _init_db(self):
import os
os.makedirs("storage", exist_ok=True)
with sqlite3.connect(self.DB_PATH) as conn:
conn.execute("""
CREATE TABLE IF NOT EXISTS data_store (
ref_id TEXT PRIMARY KEY,
data JSON
)
""")
def store(self, data: Any) -> str:
"""將數據存入 DB,返回引用 ID"""
ref_id = f"ref_{uuid.uuid4().hex[:8]}"
with sqlite3.connect(self.DB_PATH) as conn:
conn.execute(
"INSERT INTO data_store (ref_id, data) VALUES (?, ?)",
(ref_id, json.dumps(data, default=str)) # Handle datetime serialization if needed
)
return ref_id
def retrieve(self, ref_id: str) -> Optional[Any]:
"""根據引用 ID 取回數據"""
with sqlite3.connect(self.DB_PATH) as conn:
cursor = conn.execute("SELECT data FROM data_store WHERE ref_id = ?", (ref_id,))
row = cursor.fetchone()
if row:
return json.loads(row[0])
return None
# Global Instance
offload_manager = OffloadManager()