#[ cfg( feature = "enabled" ) ]
mod private
{
use serde::{ Serialize, Deserialize };
use core::hash::{ Hash, Hasher };
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
#[ cfg_attr( feature = "request_caching", derive( Hash ) ) ]
pub struct Message
{
pub role : String,
pub content : String,
}
#[ cfg( feature = "vision_support" ) ]
#[ derive( Debug, Clone, Serialize, Deserialize, Default, PartialEq ) ]
#[ cfg_attr( feature = "request_caching", derive( Hash ) ) ]
#[ serde( rename_all = "lowercase" ) ]
pub enum MessageRole
{
#[ default ]
User,
Assistant,
System,
#[ cfg( feature = "tool_calling" ) ]
Tool,
}
#[ cfg( feature = "vision_support" ) ]
#[ derive( Debug, Clone, Serialize, Deserialize, Default ) ]
#[ cfg_attr( feature = "request_caching", derive( Hash ) ) ]
pub struct ChatMessage
{
pub role : MessageRole,
pub content : String,
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub images : Option< Vec< String > >,
#[ cfg( feature = "tool_calling" ) ]
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub tool_calls : Option< Vec< ToolCall > >,
}
#[ cfg( feature = "tool_calling" ) ]
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
pub struct ToolDefinition
{
pub name : String,
pub description : String,
pub parameters : serde_json::Value,
}
#[ cfg( all( feature = "tool_calling", feature = "request_caching" ) ) ]
impl Hash for ToolDefinition
{
#[ inline ]
fn hash< H : Hasher >( &self, state : &mut H )
{
self.name.hash( state );
self.description.hash( state );
self.parameters.to_string().hash( state );
}
}
#[ cfg( feature = "tool_calling" ) ]
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
pub struct ToolCall
{
pub id : String,
pub function : serde_json::Value,
}
#[ cfg( all( feature = "tool_calling", feature = "request_caching" ) ) ]
impl Hash for ToolCall
{
#[ inline ]
fn hash< H : Hasher >( &self, state : &mut H )
{
self.id.hash( state );
self.function.to_string().hash( state );
}
}
#[ cfg( feature = "tool_calling" ) ]
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
#[ cfg_attr( feature = "request_caching", derive( Hash ) ) ]
pub struct ToolMessage
{
pub role : MessageRole,
pub content : String,
pub tool_call_id : String,
}
}
#[ cfg( feature = "enabled" ) ]
crate ::mod_interface!
{
exposed use
{
Message,
};
#[ cfg( feature = "vision_support" ) ]
exposed use
{
MessageRole,
ChatMessage,
};
#[ cfg( feature = "tool_calling" ) ]
exposed use
{
ToolDefinition,
ToolCall,
ToolMessage,
};
}