pub struct Message {
pub role: MessageRole,
pub content: MessageContent,
pub reasoning: Option<String>,
pub reasoning_details: Option<Vec<Value>>,
pub tool_calls: Option<Vec<ToolCall>>,
pub tool_call_id: Option<String>,
pub phase: Option<AssistantPhase>,
pub origin_tool: Option<String>,
}Expand description
Universal message structure supporting both text and image content
Fields§
§role: MessageRole§content: MessageContentContent can be a string (for backward compatibility) or an array of content parts
reasoning: Option<String>§reasoning_details: Option<Vec<Value>>§tool_calls: Option<Vec<ToolCall>>§tool_call_id: Option<String>§phase: Option<AssistantPhase>Optional assistant-only phase metadata used by OpenAI Responses workflows.
origin_tool: Option<String>Optional origin tool name for tracking which tool generated this message Used in tool-aware context retention to preserve results from recently-active tools
Implementations§
Source§impl Message
impl Message
Sourcepub fn estimate_tokens(&self) -> usize
pub fn estimate_tokens(&self) -> usize
Estimate the number of tokens in this message (rough approximation).
Sourcepub const fn base(role: MessageRole, content: MessageContent) -> Self
pub const fn base(role: MessageRole, content: MessageContent) -> Self
Helper to create a base message with common defaults. Public for use in provider implementations.
Sourcepub fn user_with_parts(content_parts: Vec<ContentPart>) -> Self
pub fn user_with_parts(content_parts: Vec<ContentPart>) -> Self
Create a user message with multiple content parts (text and images)
Sourcepub fn assistant_with_parts(content_parts: Vec<ContentPart>) -> Self
pub fn assistant_with_parts(content_parts: Vec<ContentPart>) -> Self
Create an assistant message with multiple content parts
Sourcepub fn assistant_with_tools(content: String, tool_calls: Vec<ToolCall>) -> Self
pub fn assistant_with_tools(content: String, tool_calls: Vec<ToolCall>) -> Self
Create an assistant message with tool calls Based on OpenAI Cookbook patterns for function calling
Sourcepub fn assistant_with_tools_and_parts(
content_parts: Vec<ContentPart>,
tool_calls: Vec<ToolCall>,
) -> Self
pub fn assistant_with_tools_and_parts( content_parts: Vec<ContentPart>, tool_calls: Vec<ToolCall>, ) -> Self
Create an assistant message with tool calls and multiple content parts
Sourcepub fn assistant_with_tools_and_reasoning(
content: String,
tool_calls: Vec<ToolCall>,
reasoning_details: Option<Vec<Value>>,
) -> Self
pub fn assistant_with_tools_and_reasoning( content: String, tool_calls: Vec<ToolCall>, reasoning_details: Option<Vec<Value>>, ) -> Self
Create an assistant message with tool calls and reasoning details Used for preserving reasoning state in multi-turn conversations
Sourcepub fn tool_response(tool_call_id: String, content: String) -> Self
pub fn tool_response(tool_call_id: String, content: String) -> Self
Create a tool response message This follows the exact pattern from OpenAI Cookbook:
{
"role": "tool",
"tool_call_id": "call_123",
"content": "Function result"
}Sourcepub fn tool_response_with_name(
tool_call_id: String,
_function_name: String,
content: String,
) -> Self
pub fn tool_response_with_name( tool_call_id: String, _function_name: String, content: String, ) -> Self
Create a tool response message with function name (for compatibility) Some providers might need the function name in addition to tool_call_id
Sourcepub fn tool_response_with_origin(
tool_call_id: String,
content: String,
origin_tool: String,
) -> Self
pub fn tool_response_with_origin( tool_call_id: String, content: String, origin_tool: String, ) -> Self
Create a tool response message with origin tool tracking The origin_tool field helps with tool-aware context retention
Sourcepub async fn user_with_local_image<P: AsRef<Path>>(
file_path: P,
) -> Result<Self, Error>
pub async fn user_with_local_image<P: AsRef<Path>>( file_path: P, ) -> Result<Self, Error>
Create a user message with image from a local file
Sourcepub async fn user_with_text_and_local_image<P: AsRef<Path>>(
text: String,
file_path: P,
) -> Result<Self, Error>
pub async fn user_with_text_and_local_image<P: AsRef<Path>>( text: String, file_path: P, ) -> Result<Self, Error>
Create a user message with text and a local image
Sourcepub fn with_reasoning(self, reasoning: Option<String>) -> Self
pub fn with_reasoning(self, reasoning: Option<String>) -> Self
Attach provider-visible reasoning trace for archival without affecting payloads.
Sourcepub fn with_tool_calls(self, tool_calls: Vec<ToolCall>) -> Self
pub fn with_tool_calls(self, tool_calls: Vec<ToolCall>) -> Self
Attach tool calls to this message.
Sourcepub fn with_reasoning_details(
self,
reasoning_details: Option<Vec<Value>>,
) -> Self
pub fn with_reasoning_details( self, reasoning_details: Option<Vec<Value>>, ) -> Self
Attach reasoning details for providers that support structured reasoning
Sourcepub fn with_phase(self, phase: Option<AssistantPhase>) -> Self
pub fn with_phase(self, phase: Option<AssistantPhase>) -> Self
Attach assistant phase metadata for providers that support it.
Sourcepub fn validate_for_provider(&self, provider: &str) -> Result<(), String>
pub fn validate_for_provider(&self, provider: &str) -> Result<(), String>
Validate this message for a specific provider Based on official API documentation constraints
Sourcepub fn has_tool_calls(&self) -> bool
pub fn has_tool_calls(&self) -> bool
Check if this message has tool calls
Sourcepub fn get_tool_calls(&self) -> Option<&[ToolCall]>
pub fn get_tool_calls(&self) -> Option<&[ToolCall]>
Get the tool calls if present
Sourcepub fn is_tool_response(&self) -> bool
pub fn is_tool_response(&self) -> bool
Check if this is a tool response message
Sourcepub fn get_text_content(&self) -> Cow<'_, str>
pub fn get_text_content(&self) -> Cow<'_, str>
Get the text content of the message (for backward compatibility)
Sourcepub fn has_images(&self) -> bool
pub fn has_images(&self) -> bool
Check if this message contains images
Sourcepub fn get_images(&self) -> Vec<&ContentPart>
pub fn get_images(&self) -> Vec<&ContentPart>
Get all images in this message
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Message
impl<'de> Deserialize<'de> for Message
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<&Message> for SessionMessage
impl From<&Message> for SessionMessage
Source§impl From<&SessionMessage> for Message
impl From<&SessionMessage> for Message
Source§fn from(message: &SessionMessage) -> Self
fn from(message: &SessionMessage) -> Self
impl StructuralPartialEq for Message
Auto Trait Implementations§
impl Freeze for Message
impl RefUnwindSafe for Message
impl Send for Message
impl Sync for Message
impl Unpin for Message
impl UnsafeUnpin for Message
impl UnwindSafe for Message
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> CacheValue for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more