Skip to main content

lha_core/
events.rs

1use crate::input::InputQueue;
2use crate::session::SessionId;
3use crate::session::SubmissionId;
4use lha_llm::ItemHandle;
5use lha_llm::RuntimeNotice;
6use lha_llm::SemanticOutputItem;
7use lha_llm::ToolCallRequest;
8use lha_llm::ToolResultItem;
9use lha_llm::TranscriptItem;
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum TurnItemDelta {
13    OutputText { delta: String },
14    ProposedPlan { delta: String },
15    ReasoningSummary { delta: String, summary_index: i64 },
16    ReasoningContent { delta: String, content_index: i64 },
17    ReasoningSummaryPartAdded { summary_index: i64 },
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21pub struct TurnSummary {
22    pub needs_follow_up: bool,
23    pub last_agent_message: Option<String>,
24    pub response_total_tokens: Option<i64>,
25    pub tool_output_tokens: i64,
26}
27
28#[derive(Debug, Clone, PartialEq)]
29pub enum AgentEvent {
30    SessionStarted {
31        session_id: SessionId,
32    },
33    SessionStatusChanged {
34        session_id: SessionId,
35        status: crate::SessionStatus,
36    },
37    InputQueued {
38        session_id: SessionId,
39        queue: InputQueue,
40        items: Vec<TranscriptItem>,
41    },
42    TurnStarted {
43        session_id: SessionId,
44        submission_id: SubmissionId,
45    },
46    RuntimeNotice {
47        session_id: SessionId,
48        notice: RuntimeNotice,
49    },
50    OutputItemStarted {
51        session_id: SessionId,
52        submission_id: SubmissionId,
53        handle: ItemHandle,
54        item: SemanticOutputItem,
55    },
56    OutputItemDelta {
57        session_id: SessionId,
58        submission_id: SubmissionId,
59        handle: ItemHandle,
60        delta: TurnItemDelta,
61    },
62    OutputItemCompleted {
63        session_id: SessionId,
64        submission_id: SubmissionId,
65        handle: ItemHandle,
66        item: SemanticOutputItem,
67    },
68    ToolCallRequested {
69        session_id: SessionId,
70        submission_id: SubmissionId,
71        call: ToolCallRequest,
72    },
73    ToolCallCompleted {
74        session_id: SessionId,
75        submission_id: SubmissionId,
76        response: ToolResultItem,
77    },
78    ServerReasoningIncluded {
79        session_id: SessionId,
80        included: bool,
81    },
82    ModelsEtagUpdated {
83        session_id: SessionId,
84        etag: String,
85    },
86    TurnCompleted {
87        session_id: SessionId,
88        submission_id: SubmissionId,
89        outcome: TurnSummary,
90    },
91    TurnFailed {
92        session_id: SessionId,
93        submission_id: SubmissionId,
94        error: String,
95    },
96    TurnAborted {
97        session_id: SessionId,
98        submission_id: SubmissionId,
99    },
100}