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 } => {
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}