#[ cfg( feature = "enabled" ) ]
mod private
{
use serde::{ Serialize, Deserialize };
use core::hash::{ Hash, Hasher };
use crate::messages::{ ChatMessage, ToolDefinition, ToolMessage };
#[ cfg( not( feature = "vision_support" ) ) ]
use crate::messages::Message;
#[ derive( Debug, Clone, Serialize ) ]
pub struct ChatRequest
{
pub model : String,
#[ cfg( feature = "vision_support" ) ]
pub messages : Vec< ChatMessage >,
#[ cfg( not( feature = "vision_support" ) ) ]
pub messages : Vec< Message >,
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub stream : Option< bool >,
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub options : Option< serde_json::Value >,
#[ cfg( feature = "tool_calling" ) ]
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub tools : Option< Vec< ToolDefinition > >,
#[ cfg( feature = "tool_calling" ) ]
#[ serde( skip_serializing_if = "Option::is_none" ) ]
pub tool_messages : Option< Vec< ToolMessage > >,
}
#[ cfg( feature = "request_caching" ) ]
impl Hash for ChatRequest
{
#[ inline ]
fn hash< H : Hasher >( &self, state : &mut H )
{
self.model.hash( state );
self.messages.hash( state );
self.stream.hash( state );
if let Some( ref options ) = self.options
{
options.to_string().hash( state );
}
#[ cfg( feature = "tool_calling" ) ]
{
self.tools.hash( state );
self.tool_messages.hash( state );
}
}
}
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
pub struct ChatResponse
{
#[ cfg( feature = "vision_support" ) ]
pub message : ChatMessage,
#[ serde( default ) ]
#[ cfg( not( feature = "vision_support" ) ) ]
pub message : Option< Message >,
#[ serde( default ) ]
pub done : bool,
#[ serde( default ) ]
pub done_reason : Option< String >,
#[ serde( default ) ]
pub model : Option< String >,
#[ serde( default ) ]
pub created_at : Option< String >,
#[ serde( default ) ]
pub total_duration : Option< u64 >,
#[ serde( default ) ]
pub load_duration : Option< u64 >,
#[ serde( default ) ]
pub prompt_eval_count : Option< u32 >,
#[ serde( default ) ]
pub prompt_eval_duration : Option< u64 >,
#[ serde( default ) ]
pub eval_count : Option< u32 >,
#[ serde( default ) ]
pub eval_duration : Option< u64 >,
}
}
#[ cfg( feature = "enabled" ) ]
crate ::mod_interface!
{
exposed use
{
ChatRequest,
ChatResponse,
};
}