diff options
| author | sigoden <sigoden@gmail.com> | 2025-02-04 10:38:07 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-04 10:38:07 +0800 |
| commit | 470eeb2efc8b5c9f20ec275d3b2ced1d92e1642d (patch) | |
| tree | 5bc5ad79a6f668c2a32e39b48643b17fb4763d20 /src/client | |
| parent | 09c5a03c0e6728a407660215c4dc63491a3c024c (diff) | |
| download | aichat-470eeb2efc8b5c9f20ec275d3b2ced1d92e1642d.tar.gz | |
feat: add model field `supports_reasoning` (#1145)
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/model.rs | 10 | ||||
| -rw-r--r-- | src/client/openai.rs | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/client/model.rs b/src/client/model.rs index bcd474f..94332f5 100644 --- a/src/client/model.rs +++ b/src/client/model.rs @@ -131,6 +131,7 @@ impl Model { output_price, supports_vision, supports_function_calling, + supports_reasoning, .. } = &self.data; let max_input_tokens = stringify_option_value(max_input_tokens); @@ -144,6 +145,9 @@ impl Model { if *supports_function_calling { capabilities.push('⚒'); }; + if *supports_reasoning { + capabilities.push('🄡'); + } let capabilities: String = capabilities .into_iter() .map(|v| format!("{v} ")) @@ -178,6 +182,10 @@ impl Model { self.data.max_output_tokens } + pub fn supports_reasoning(&self) -> bool { + self.data.supports_reasoning + } + pub fn no_stream(&self) -> bool { self.data.no_stream } @@ -302,6 +310,8 @@ pub struct ModelData { #[serde(default, skip_serializing_if = "std::ops::Not::not")] pub supports_function_calling: bool, #[serde(default, skip_serializing_if = "std::ops::Not::not")] + supports_reasoning: bool, + #[serde(default, skip_serializing_if = "std::ops::Not::not")] no_stream: bool, #[serde(default, skip_serializing_if = "std::ops::Not::not")] no_system_message: bool, diff --git a/src/client/openai.rs b/src/client/openai.rs index 928a600..7989c34 100644 --- a/src/client/openai.rs +++ b/src/client/openai.rs @@ -301,6 +301,9 @@ pub fn openai_build_chat_completions_body(data: ChatCompletionsData, model: &Mod if let Some(v) = model.max_tokens_param() { body["max_tokens"] = v.into(); } + if model.client_name().starts_with("openrouter") && model.supports_reasoning() { + body["include_reasoning"] = true.into(); + } if let Some(v) = temperature { body["temperature"] = v.into(); } |
