aether_core/events/
user_message.rs1use llm::{ContentBlock, ReasoningEffort, StreamingModelProvider, ToolDefinition};
2
3pub enum UserMessage {
5 Text { content: Vec<ContentBlock> },
6 Cancel,
7 ClearContext,
8 SwitchModel(Box<dyn StreamingModelProvider>),
9 UpdateTools(Vec<ToolDefinition>),
10 SetReasoningEffort(Option<ReasoningEffort>),
11}
12
13impl std::fmt::Debug for UserMessage {
14 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15 match self {
16 UserMessage::Text { content } => f.debug_struct("Text").field("content", content).finish(),
17 UserMessage::Cancel => write!(f, "Cancel"),
18 UserMessage::ClearContext => write!(f, "ClearContext"),
19 UserMessage::SwitchModel(provider) => f.debug_tuple("SwitchModel").field(&provider.display_name()).finish(),
20 UserMessage::UpdateTools(tools) => f.debug_tuple("UpdateTools").field(&tools.len()).finish(),
21 UserMessage::SetReasoningEffort(effort) => f.debug_tuple("SetReasoningEffort").field(effort).finish(),
22 }
23 }
24}
25
26impl UserMessage {
27 pub fn text(content: &str) -> Self {
28 UserMessage::Text { content: vec![ContentBlock::text(content)] }
29 }
30
31 pub fn with_content(content: Vec<ContentBlock>) -> Self {
32 UserMessage::Text { content }
33 }
34}
35
36impl From<&str> for UserMessage {
37 fn from(value: &str) -> Self {
38 UserMessage::text(value)
39 }
40}