Skip to main content

aether_core/events/
user_message.rs

1use llm::{ContentBlock, ReasoningEffort, StreamingModelProvider, ToolDefinition};
2
3/// Message from the user to the agent.
4pub 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}