use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use ts_rs::TS;
use crate::language_model_message::LanguageModelPrompt;
use crate::shared::AbortSignal;
pub use crate::tool::{FunctionTool, ProviderTool, Tool, ToolChoice};
use crate::types::ReasoningEffort;
#[derive(Debug, Clone, Serialize, Deserialize, TS)]
#[ts(export)]
pub enum ResponseFormat {
Text,
Json {
schema: Option<Value>,
name: Option<String>,
description: Option<String>,
},
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, TS)]
#[ts(export)]
pub struct TimeoutConfiguration {
pub total_ms: Option<u64>,
pub first_chunk_ms: Option<u64>,
pub chunk_ms: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, TS)]
#[ts(export)]
pub struct CallOptions {
pub prompt: LanguageModelPrompt,
pub max_output_tokens: Option<u32>,
pub temperature: Option<f64>,
pub stop_sequences: Option<Vec<String>>,
pub top_p: Option<f64>,
pub top_k: Option<f64>,
pub presence_penalty: Option<f64>,
pub frequency_penalty: Option<f64>,
pub response_format: Option<ResponseFormat>,
pub seed: Option<u64>,
pub tools: Option<Vec<Tool>>,
pub tool_choice: ToolChoice,
pub headers: Option<HashMap<String, String>>,
pub provider_options: Option<HashMap<String, Value>>,
pub reasoning: Option<ReasoningEffort>,
pub body_overrides: Option<Value>,
pub max_retries: Option<u32>,
pub timeout: Option<TimeoutConfiguration>,
#[serde(skip)]
#[ts(skip)]
pub abort_signal: Option<AbortSignal>,
}
impl CallOptions {
pub fn new(prompt: LanguageModelPrompt) -> Self {
CallOptions {
prompt,
max_output_tokens: None,
temperature: None,
stop_sequences: None,
top_p: None,
top_k: None,
presence_penalty: None,
frequency_penalty: None,
response_format: None,
seed: None,
tools: None,
tool_choice: ToolChoice::default(),
headers: None,
provider_options: None,
reasoning: None,
body_overrides: None,
max_retries: None,
timeout: None,
abort_signal: None,
}
}
}