llmsdk_provider/language_model/
call_options.rs1use serde::{Deserialize, Serialize};
8
9use crate::json::JsonSchema;
10use crate::shared::{Headers, ProviderOptions};
11
12use super::prompt::Prompt;
13use super::tool::{Tool, ToolChoice};
14
15#[derive(Debug, Clone, Default, Serialize, Deserialize)]
19pub struct CallOptions {
20 pub prompt: Prompt,
22 #[serde(
24 default,
25 rename = "maxOutputTokens",
26 skip_serializing_if = "Option::is_none"
27 )]
28 pub max_output_tokens: Option<u32>,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub temperature: Option<f32>,
32 #[serde(
34 default,
35 rename = "stopSequences",
36 skip_serializing_if = "Option::is_none"
37 )]
38 pub stop_sequences: Option<Vec<String>>,
39 #[serde(default, rename = "topP", skip_serializing_if = "Option::is_none")]
41 pub top_p: Option<f32>,
42 #[serde(default, rename = "topK", skip_serializing_if = "Option::is_none")]
44 pub top_k: Option<u32>,
45 #[serde(
47 default,
48 rename = "presencePenalty",
49 skip_serializing_if = "Option::is_none"
50 )]
51 pub presence_penalty: Option<f32>,
52 #[serde(
54 default,
55 rename = "frequencyPenalty",
56 skip_serializing_if = "Option::is_none"
57 )]
58 pub frequency_penalty: Option<f32>,
59 #[serde(
61 default,
62 rename = "responseFormat",
63 skip_serializing_if = "Option::is_none"
64 )]
65 pub response_format: Option<ResponseFormat>,
66 #[serde(default, skip_serializing_if = "Option::is_none")]
68 pub seed: Option<u64>,
69 #[serde(default, skip_serializing_if = "Option::is_none")]
71 pub tools: Option<Vec<Tool>>,
72 #[serde(
74 default,
75 rename = "toolChoice",
76 skip_serializing_if = "Option::is_none"
77 )]
78 pub tool_choice: Option<ToolChoice>,
79 #[serde(
81 default,
82 rename = "includeRawChunks",
83 skip_serializing_if = "Option::is_none"
84 )]
85 pub include_raw_chunks: Option<bool>,
86 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub headers: Option<Headers>,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub reasoning: Option<ReasoningEffort>,
92 #[serde(
94 default,
95 rename = "providerOptions",
96 skip_serializing_if = "Option::is_none"
97 )]
98 pub provider_options: Option<ProviderOptions>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
103#[serde(tag = "type", rename_all = "kebab-case")]
104pub enum ResponseFormat {
105 Text,
107 Json {
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 schema: Option<JsonSchema>,
112 #[serde(default, skip_serializing_if = "Option::is_none")]
114 name: Option<String>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 description: Option<String>,
118 },
119}
120
121#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
126#[serde(rename_all = "kebab-case")]
127pub enum ReasoningEffort {
128 ProviderDefault,
130 None,
132 Minimal,
134 Low,
136 Medium,
138 High,
140 Xhigh,
142}