use machi_tools::ToolDefinition;
use machi_types::{Deadline, Message, Usage};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use tokio_util::sync::CancellationToken;
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ToolChoice {
#[default]
Auto,
None,
Required,
Named(String),
}
#[derive(Debug, Clone)]
pub struct SampleRequest {
pub model: String,
pub messages: Vec<Message>,
pub tools: Vec<ToolDefinition>,
pub tool_choice: ToolChoice,
pub response_format: Option<Value>,
pub max_output_tokens: Option<u32>,
pub temperature: Option<f32>,
pub cancel: CancellationToken,
pub deadline: Option<Deadline>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SampleResponse {
pub message: Message,
pub usage: Usage,
pub stop_reason: Option<String>,
}