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 } => {
17                f.debug_struct("Text").field("content", content).finish()
18            }
19            UserMessage::Cancel => write!(f, "Cancel"),
20            UserMessage::ClearContext => write!(f, "ClearContext"),
21            UserMessage::SwitchModel(provider) => f
22                .debug_tuple("SwitchModel")
23                .field(&provider.display_name())
24                .finish(),
25            UserMessage::UpdateTools(tools) => {
26                f.debug_tuple("UpdateTools").field(&tools.len()).finish()
27            }
28            UserMessage::SetReasoningEffort(effort) => {
29                f.debug_tuple("SetReasoningEffort").field(effort).finish()
30            }
31        }
32    }
33}
34
35impl UserMessage {
36    pub fn text(content: &str) -> Self {
37        UserMessage::Text {
38            content: vec![ContentBlock::text(content)],
39        }
40    }
41
42    pub fn with_content(content: Vec<ContentBlock>) -> Self {
43        UserMessage::Text { content }
44    }
45}
46
47impl From<&str> for UserMessage {
48    fn from(value: &str) -> Self {
49        UserMessage::text(value)
50    }
51}