File size: 1,501 Bytes
b7d08cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()