File size: 2,051 Bytes
aba9311
 
6b71d3d
aba9311
 
 
6b71d3d
aba9311
 
 
 
 
 
 
 
 
 
 
 
 
6b71d3d
 
 
aba9311
 
 
 
 
 
 
 
 
 
 
 
6b71d3d
aba9311
 
 
 
 
 
 
 
 
 
 
 
 
6b71d3d
aba9311
 
 
 
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
48
49
50
51
52
53
54
"""
LifeFlow AI - Session Management
✅ 新增 final_report 欄位,用於在 Step 3 和 Step 4 之間傳遞報告內容
"""
import uuid
from typing import Dict, Any, Optional
from src.agent.base import UserState
from src.infra.config import get_settings

class UserSession:
    def __init__(self):
        self.session_id: Optional[str] = None
        self.planner_agent = None
        self.core_team = None
        self.user_state: Optional[UserState] = None
        self.task_list: list = []
        self.reasoning_messages: list = []
        self.chat_history: list = []
        self.planning_completed: bool = False

        # 🔥 新增:儲存 Step 3 生成的完整報告
        self.final_report: str = ""

        self.lat: Optional[float] = None
        self.lng: Optional[float] = None
        self.custom_settings: Dict[str, Any] = {}
        self.agno_settings = get_settings()

    def to_dict(self) -> Dict[str, Any]:
        return {
            'session_id': self.session_id,
            'task_list': self.task_list,
            'reasoning_messages': self.reasoning_messages,
            'chat_history': self.chat_history,
            'planning_completed': self.planning_completed,
            'final_report': self.final_report, # 🔥 序列化
            'lat': self.lat,
            'lng': self.lng,
            'custom_settings': self.custom_settings
        }

    @classmethod
    def from_dict(cls, data: Dict[str, Any]) -> 'UserSession':
        session = cls()
        session.session_id = data.get('session_id')
        session.task_list = data.get('task_list', [])
        session.reasoning_messages = data.get('reasoning_messages', [])
        session.chat_history = data.get('chat_history', [])
        session.planning_completed = data.get('planning_completed', False)
        session.final_report = data.get('final_report', "") # 🔥 反序列化
        session.lat = data.get('lat')
        session.lng = data.get('lng')
        session.custom_settings = data.get('custom_settings', {})
        return session