import typing as T from dataclasses import dataclass, field from astrbot.core.message.message_event_result import MessageChain from astrbot.core.provider.entities import TokenUsage class AgentResponseData(T.TypedDict): chain: MessageChain @dataclass class AgentResponse: type: str data: AgentResponseData @dataclass class AgentStats: token_usage: TokenUsage = field(default_factory=TokenUsage) start_time: float = 0.0 end_time: float = 0.0 time_to_first_token: float = 0.0 @property def duration(self) -> float: return self.end_time - self.start_time def to_dict(self) -> dict: return { "token_usage": self.token_usage.__dict__, "start_time": self.start_time, "end_time": self.end_time, "time_to_first_token": self.time_to_first_token, }