diff --git a/crates/goose-server/src/routes/agent.rs b/crates/goose-server/src/routes/agent.rs index be5793f1bbb4..62889bde80d7 100644 --- a/crates/goose-server/src/routes/agent.rs +++ b/crates/goose-server/src/routes/agent.rs @@ -468,27 +468,35 @@ async fn update_from_session( status: StatusCode::INTERNAL_SERVER_ERROR, })?; if let Some(recipe) = session.recipe { - match build_recipe_with_parameter_values( - &recipe, - session.user_recipe_values.unwrap_or_default(), - ) - .await - { - Ok(Some(recipe)) => { - if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { - agent - .extend_system_prompt("recipe".to_string(), prompt) - .await; - } - } - Ok(None) => { - // Recipe has missing parameters + if session.session_type == SessionType::Scheduled { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; } - Err(e) => { - return Err(ErrorResponse { - message: e.to_string(), - status: StatusCode::INTERNAL_SERVER_ERROR, - }); + } else { + match build_recipe_with_parameter_values( + &recipe, + session.user_recipe_values.unwrap_or_default(), + ) + .await + { + Ok(Some(recipe)) => { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } + Ok(None) => { + // Recipe has missing parameters + } + Err(e) => { + return Err(ErrorResponse { + message: e.to_string(), + status: StatusCode::INTERNAL_SERVER_ERROR, + }); + } } } } @@ -758,27 +766,35 @@ async fn restart_agent_internal( })?; if let Some(ref recipe) = session.recipe { - match build_recipe_with_parameter_values( - recipe, - session.user_recipe_values.clone().unwrap_or_default(), - ) - .await - { - Ok(Some(recipe)) => { - if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { - agent - .extend_system_prompt("recipe".to_string(), prompt) - .await; - } - } - Ok(None) => { - // Recipe has missing parameters + if session.session_type == SessionType::Scheduled { + if let Some(prompt) = apply_recipe_to_agent(&agent, recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; } - Err(e) => { - return Err(ErrorResponse { - message: e.to_string(), - status: StatusCode::INTERNAL_SERVER_ERROR, - }); + } else { + match build_recipe_with_parameter_values( + recipe, + session.user_recipe_values.clone().unwrap_or_default(), + ) + .await + { + Ok(Some(recipe)) => { + if let Some(prompt) = apply_recipe_to_agent(&agent, &recipe, true).await { + agent + .extend_system_prompt("recipe".to_string(), prompt) + .await; + } + } + Ok(None) => { + // Recipe has missing parameters + } + Err(e) => { + return Err(ErrorResponse { + message: e.to_string(), + status: StatusCode::INTERNAL_SERVER_ERROR, + }); + } } } } diff --git a/crates/goose-test-support/src/otel.rs b/crates/goose-test-support/src/otel.rs index 4eed3370f0b4..1b7459f37e0e 100644 --- a/crates/goose-test-support/src/otel.rs +++ b/crates/goose-test-support/src/otel.rs @@ -32,10 +32,14 @@ pub fn clear_otel_env(overrides: &[(&'static str, &'static str)]) -> OtelTestGua let mut keys: Vec<&'static str> = vec![ "OTEL_EXPORTER_OTLP_ENDPOINT", "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT", + "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL", "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", + "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL", "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE", + "OTEL_EXPORTER_OTLP_PROTOCOL", "OTEL_EXPORTER_OTLP_TIMEOUT", "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", "OTEL_LOG_LEVEL", "OTEL_LOGS_EXPORTER", "OTEL_METRICS_EXPORTER", diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index 7456ae0afced..91f2e8748016 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -65,6 +65,7 @@ use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, instrument, warn}; const DEFAULT_MAX_TURNS: u32 = 1000; +const DEFAULT_STOP_HOOK_BLOCK_CAP: u32 = 8; const COMPACTION_THINKING_TEXT: &str = "goose is compacting the conversation..."; const DEFAULT_FRONTEND_INSTRUCTIONS: &str = "The following tools are provided directly by the frontend and will be executed by the frontend when called."; @@ -98,6 +99,35 @@ fn extract_string_arg(input: &Value, keys: &[&str]) -> Option { None } +fn stop_hook_denial_context_message(plugin: &str, reason: &str) -> Message { + let nudge = format!( + "Stop hook `{plugin}` blocked ending this turn: + +{reason} + +Address this policy hook denial before trying to stop again." + ); + Message::user() + .with_text(nudge) + .with_visibility(false, true) +} + +fn stop_hook_denial_notification(plugin: &str) -> Message { + Message::assistant().with_system_notification( + SystemNotificationType::InlineMessage, + format!("Stop hook `{plugin}` blocked ending this turn."), + ) +} + +fn stop_hook_block_cap_warning(plugin: &str, cap: u32) -> Message { + Message::assistant().with_system_notification( + SystemNotificationType::InlineMessage, + format!( + "Stop hook `{plugin}` blocked the turn from ending more than {cap} consecutive times — overriding and ending turn to avoid an infinite loop. Set GOOSE_STOP_HOOK_BLOCK_CAP to raise this limit." + ), + ) +} + /// Context needed for the reply function pub struct ReplyContext { pub conversation: Conversation, @@ -211,6 +241,8 @@ pub struct Agent { pub(super) retry_manager: RetryManager, pub(super) tool_inspection_manager: ToolInspectionManager, pub(super) hook_manager: crate::hooks::HookManager, + #[cfg(test)] + stop_hook_block_cap_override: Option, container: Mutex>, goal: Mutex>, grind: Mutex>, @@ -330,6 +362,8 @@ impl Agent { provider.clone(), ), hook_manager: crate::hooks::HookManager::load(std::env::current_dir().ok().as_deref()), + #[cfg(test)] + stop_hook_block_cap_override: None, container: Mutex::new(None), goal: Mutex::new(None), grind: Mutex::new(None), @@ -338,6 +372,27 @@ impl Agent { /// Emit a lifecycle hook event with no extra context. Useful for events /// that have no matcher (e.g. `SessionStart`, `SessionEnd`). + #[cfg(test)] + pub(crate) fn set_hook_manager_for_test(&mut self, hook_manager: crate::hooks::HookManager) { + self.hook_manager = hook_manager; + } + + #[cfg(test)] + pub(crate) fn set_stop_hook_block_cap_for_test(&mut self, cap: u32) { + self.stop_hook_block_cap_override = Some(cap); + } + + fn stop_hook_block_cap(&self) -> u32 { + #[cfg(test)] + if let Some(cap) = self.stop_hook_block_cap_override { + return cap; + } + + Config::global() + .get_param::("GOOSE_STOP_HOOK_BLOCK_CAP") + .unwrap_or(DEFAULT_STOP_HOOK_BLOCK_CAP) + } + pub async fn emit_hook(&self, event: crate::hooks::HookEvent, session_id: &str) { if !self.hook_manager.has_hooks(event) { return; @@ -1643,21 +1698,63 @@ impl Agent { let mut last_assistant_text = String::new(); let mut goal_check_pending = false; let mut tool_pair_summarization_done = false; + let mut stop_hook_handled_for_exit = false; + let mut retrying_after_stop_hook_denial = false; + let mut consecutive_stop_hook_blocks = 0u32; + let stop_hook_block_cap = self.stop_hook_block_cap(); loop { if is_token_cancelled(&cancel_token) { break; } - { - let guard = self.final_output_tool.lock().await; - if let Some(ref output) = guard.as_ref().and_then(|fot| fot.final_output.clone()) { - yield AgentEvent::Message(Message::assistant().with_text(output)); - break; + let final_output = { + let mut guard = self.final_output_tool.lock().await; + guard.as_mut().and_then(|fot| fot.final_output.take()) + }; + if let Some(output) = final_output { + let message = Message::assistant().with_text(output); + yield AgentEvent::Message(message.clone()); + session_manager.add_message(&session_config.id, &message).await?; + conversation.push(message); + + let ctx = crate::hooks::HookContext::new( + crate::hooks::HookEvent::Stop, + &session_config.id, + ); + match self + .hook_manager + .emit_blocking(crate::hooks::HookEvent::Stop, ctx) + .await + { + crate::hooks::HookDecision::Allow => { + stop_hook_handled_for_exit = true; + break; + } + crate::hooks::HookDecision::Deny { reason, plugin } => { + consecutive_stop_hook_blocks += 1; + if consecutive_stop_hook_blocks > stop_hook_block_cap { + let message = stop_hook_block_cap_warning(&plugin, stop_hook_block_cap); + session_manager.add_message(&session_config.id, &message).await?; + yield AgentEvent::Message(message); + stop_hook_handled_for_exit = true; + break; + } + let message = stop_hook_denial_context_message(&plugin, &reason); + session_manager.add_message(&session_config.id, &message).await?; + conversation.push(message); + yield AgentEvent::Message(stop_hook_denial_notification(&plugin)); + retrying_after_stop_hook_denial = true; + continue; + } } } - turns_taken += 1; + if retrying_after_stop_hook_denial { + retrying_after_stop_hook_denial = false; + } else { + turns_taken += 1; + } if turns_taken > max_turns { yield AgentEvent::Message( Message::assistant().with_text( @@ -1706,6 +1803,7 @@ impl Agent { let mut tools_updated = false; let mut did_recovery_compact_this_iteration = false; let mut exit_chat = false; + let mut pending_final_output: Option = None; // Track whether this provider turn has already emitted visible // thinking so a later tool-call chunk can suppress replayed @@ -2135,8 +2233,8 @@ impl Agent { // Lock, extract state, drop guard before branching — handle_retry_logic // also locks final_output_tool and tokio::sync::Mutex is not reentrant. let final_output = { - let guard = self.final_output_tool.lock().await; - guard.as_ref().map(|fot| fot.final_output.clone()) + let mut guard = self.final_output_tool.lock().await; + guard.as_mut().map(|fot| fot.final_output.take()) }; match final_output { @@ -2147,9 +2245,7 @@ impl Agent { yield AgentEvent::Message(message); } Some(Some(output)) => { - let message = Message::assistant().with_text(output); - messages_to_add.push(message.clone()); - yield AgentEvent::Message(message); + pending_final_output = Some(output); exit_chat = true; } None if did_recovery_compact_this_iteration => { @@ -2257,6 +2353,12 @@ impl Agent { } } + if let Some(output) = pending_final_output.take() { + let message = Message::assistant().with_text(output); + messages_to_add.push(message.clone()); + yield AgentEvent::Message(message); + } + let messages_to_add = if let Some(ref inference) = inference { Conversation::new_unvalidated( messages_to_add @@ -2271,8 +2373,37 @@ impl Agent { session_manager.add_message(&session_config.id, msg).await?; } conversation.extend(messages_to_add); + if exit_chat { - break; + let ctx = crate::hooks::HookContext::new( + crate::hooks::HookEvent::Stop, + &session_config.id, + ); + match self + .hook_manager + .emit_blocking(crate::hooks::HookEvent::Stop, ctx) + .await + { + crate::hooks::HookDecision::Allow => { + stop_hook_handled_for_exit = true; + break; + } + crate::hooks::HookDecision::Deny { reason, plugin } => { + consecutive_stop_hook_blocks += 1; + if consecutive_stop_hook_blocks > stop_hook_block_cap { + let message = stop_hook_block_cap_warning(&plugin, stop_hook_block_cap); + session_manager.add_message(&session_config.id, &message).await?; + yield AgentEvent::Message(message); + stop_hook_handled_for_exit = true; + break; + } + let message = stop_hook_denial_context_message(&plugin, &reason); + session_manager.add_message(&session_config.id, &message).await?; + conversation.push(message); + yield AgentEvent::Message(stop_hook_denial_notification(&plugin)); + retrying_after_stop_hook_denial = true; + } + } } tokio::task::yield_now().await; @@ -2282,7 +2413,9 @@ impl Agent { tracing::Span::current().record("trace_output", last_assistant_text.as_str()); } - self.emit_hook(crate::hooks::HookEvent::Stop, &session_config.id).await; + if !stop_hook_handled_for_exit { + self.emit_hook(crate::hooks::HookEvent::Stop, &session_config.id).await; + } }.instrument(reply_stream_span)); Ok(inner) } @@ -2788,8 +2921,17 @@ impl Agent { mod tests { use super::*; use crate::permission::permission_confirmation::PrincipalType; - use crate::providers::base::PermissionRouting; + use crate::plugins::discovery::{DiscoveredPlugin, PluginScope}; + use crate::providers::base::{ + stream_from_single_message, MessageStream, PermissionRouting, ProviderUsage, Usage, + }; + use crate::providers::errors::ProviderError; use crate::recipe::Response; + use crate::session::session_manager::SessionType; + use rmcp::model::Tool; + use std::path::PathBuf; + use std::sync::atomic::{AtomicUsize, Ordering}; + use tempfile::TempDir; struct ActionRequiredProvider { handled: tokio::sync::Mutex>, @@ -2907,6 +3049,252 @@ mod tests { assert_eq!(conf.permission, crate::permission::Permission::AllowOnce); } + const ALWAYS_BLOCK_SCRIPT: &str = r#"#!/bin/sh +echo blocked >> "$PLUGIN_ROOT/hook.log" +echo "always block" >&2 +exit 2 +"#; + + const ALTERNATE_BLOCK_ALLOW_SCRIPT: &str = r#"#!/bin/sh +count_file="$PLUGIN_ROOT/count" +count=0 +if [ -f "$count_file" ]; then + count=$(cat "$count_file") +fi +count=$((count + 1)) +echo "$count" > "$count_file" +echo "$count" >> "$PLUGIN_ROOT/hook.log" +if [ $((count % 2)) -eq 1 ]; then + echo "block $count" >&2 + exit 2 +fi +exit 0 +"#; + + struct StopHookTestEnv { + temp_dir: TempDir, + hook_log: PathBuf, + } + + impl StopHookTestEnv { + fn new(script: &str) -> Result { + let temp_dir = tempfile::tempdir()?; + let plugin_dir = temp_dir.path().join("stop-blocker"); + std::fs::create_dir_all(plugin_dir.join("hooks"))?; + std::fs::write( + plugin_dir.join("hooks/hooks.json"), + r#"{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "command": "sh ${PLUGIN_ROOT}/block.sh" } + ] + } + ] + } +} +"#, + )?; + std::fs::write(plugin_dir.join("block.sh"), script)?; + + Ok(Self { + temp_dir, + hook_log: plugin_dir.join("hook.log"), + }) + } + + fn hook_manager(&self) -> crate::hooks::HookManager { + crate::hooks::HookManager::from_plugins_for_test(vec![DiscoveredPlugin { + name: "stop-blocker".into(), + root: self.temp_dir.path().join("stop-blocker"), + scope: PluginScope::Project, + }]) + } + + fn data_dir(&self) -> PathBuf { + self.temp_dir.path().join("data") + } + + fn hook_invocations(&self) -> usize { + std::fs::read_to_string(&self.hook_log) + .unwrap_or_default() + .lines() + .count() + } + } + + struct CountingTextProvider { + call_count: AtomicUsize, + } + + impl CountingTextProvider { + fn new() -> Self { + Self { + call_count: AtomicUsize::new(0), + } + } + + fn call_count(&self) -> usize { + self.call_count.load(Ordering::SeqCst) + } + } + + #[async_trait::async_trait] + impl crate::providers::base::Provider for CountingTextProvider { + async fn stream( + &self, + _model_config: &crate::model::ModelConfig, + _session_id: &str, + _system_prompt: &str, + _messages: &[Message], + _tools: &[Tool], + ) -> Result { + let call = self.call_count.fetch_add(1, Ordering::SeqCst); + let message = Message::assistant().with_text(format!("provider response {call}")); + let usage = ProviderUsage::new("mock-model".to_string(), Usage::default()); + Ok(stream_from_single_message(message, usage)) + } + + fn get_model_config(&self) -> crate::model::ModelConfig { + crate::model::ModelConfig::new("mock-model").unwrap() + } + + fn get_name(&self) -> &str { + "counting-text" + } + } + + async fn create_stop_hook_test_agent( + env: &StopHookTestEnv, + stop_hook_block_cap: u32, + ) -> Result<(Agent, String, Arc)> { + let session_manager = Arc::new(SessionManager::new(env.data_dir())); + let permission_manager = Arc::new(PermissionManager::new(env.data_dir())); + let config = AgentConfig::new( + session_manager.clone(), + permission_manager, + None, + GooseMode::Auto, + true, + GoosePlatform::GooseCli, + ); + let mut agent = Agent::with_config(config); + agent.set_hook_manager_for_test(env.hook_manager()); + agent.set_stop_hook_block_cap_for_test(stop_hook_block_cap); + let provider = Arc::new(CountingTextProvider::new()); + let session = session_manager + .create_session( + PathBuf::default(), + "stop-hook-test".to_string(), + SessionType::Hidden, + GooseMode::Auto, + ) + .await?; + agent.update_provider(provider.clone(), &session.id).await?; + Ok((agent, session.id, provider)) + } + + async fn run_stop_hook_test_turn( + agent: &Agent, + session_id: &str, + text: &str, + ) -> Result> { + let session_config = SessionConfig { + id: session_id.to_string(), + schedule_id: None, + max_turns: Some(10), + retry_config: None, + }; + let reply_stream = agent + .reply(Message::user().with_text(text), session_config, None) + .await?; + tokio::pin!(reply_stream); + + let mut messages = Vec::new(); + while let Some(event) = reply_stream.next().await { + match event? { + AgentEvent::Message(message) => messages.push(message), + AgentEvent::McpNotification(_) | AgentEvent::HistoryReplaced(_) => {} + } + } + Ok(messages) + } + + fn visible_texts(messages: &[Message]) -> Vec { + messages + .iter() + .map(Message::as_concat_text) + .filter(|text| !text.is_empty()) + .collect() + } + + #[tokio::test] + async fn stop_hook_block_cap_allows_configured_consecutive_blocks_then_overrides() -> Result<()> + { + let env = StopHookTestEnv::new(ALWAYS_BLOCK_SCRIPT)?; + let (agent, session_id, provider) = create_stop_hook_test_agent(&env, 2).await?; + + let messages = run_stop_hook_test_turn(&agent, &session_id, "hello").await?; + let texts = visible_texts(&messages); + + assert_eq!( + provider.call_count(), + 3, + "cap=2 should allow two blocked retries, then override on the third block" + ); + assert_eq!( + env.hook_invocations(), + 3, + "Stop hook should run for the initial response plus the two honored retries" + ); + assert!(texts.iter().any(|text| text == "provider response 0")); + assert!(texts.iter().any(|text| text == "provider response 1")); + assert!(texts.iter().any(|text| text == "provider response 2")); + assert!(messages.iter().any(|message| { + message.content.iter().any(|content| { + matches!( + content, + MessageContent::SystemNotification(notification) + if notification.msg.contains("more than 2 consecutive times") + && notification.msg.contains("GOOSE_STOP_HOOK_BLOCK_CAP") + ) + }) + })); + + Ok(()) + } + + #[tokio::test] + async fn stop_hook_block_cap_counts_only_consecutive_blocks() -> Result<()> { + let env = StopHookTestEnv::new(ALTERNATE_BLOCK_ALLOW_SCRIPT)?; + let (agent, session_id, provider) = create_stop_hook_test_agent(&env, 1).await?; + + let first_turn = run_stop_hook_test_turn(&agent, &session_id, "first").await?; + let second_turn = run_stop_hook_test_turn(&agent, &session_id, "second").await?; + let mut texts = visible_texts(&first_turn); + texts.extend(visible_texts(&second_turn)); + + assert_eq!( + provider.call_count(), + 4, + "each turn should honor one block, retry, then stop when the next Stop hook allows" + ); + assert_eq!(env.hook_invocations(), 4); + assert!(texts.iter().any(|text| text == "provider response 0")); + assert!(texts.iter().any(|text| text == "provider response 1")); + assert!(texts.iter().any(|text| text == "provider response 2")); + assert!(texts.iter().any(|text| text == "provider response 3")); + assert!( + !texts + .iter() + .any(|text| text.contains("overriding and ending turn")), + "non-consecutive Stop hook blocks should not trip the cap warning" + ); + + Ok(()) + } + #[tokio::test] async fn test_add_final_output_tool() -> Result<()> { let agent = Agent::new(); diff --git a/crates/goose/src/agents/extension_manager.rs b/crates/goose/src/agents/extension_manager.rs index da7e2ce90bde..cf7f67641f05 100644 --- a/crates/goose/src/agents/extension_manager.rs +++ b/crates/goose/src/agents/extension_manager.rs @@ -510,6 +510,7 @@ async fn connect_with_auth( auth_manager: rmcp::transport::AuthorizationManager, uri: &str, timeout: Duration, + headers: &HashMap, provider: SharedProvider, client_name: String, capabilities: GooseMcpClientCapabilities, @@ -517,6 +518,15 @@ async fn connect_with_auth( ) -> ExtensionResult> { let mut auth_headers = HeaderMap::new(); auth_headers.insert(reqwest::header::USER_AGENT, GOOSE_USER_AGENT); + for (key, value) in headers { + auth_headers.insert( + HeaderName::try_from(key) + .map_err(|_| ExtensionError::ConfigError(format!("invalid header: {}", key)))?, + value.parse().map_err(|_| { + ExtensionError::ConfigError(format!("invalid header value: {}", key)) + })?, + ); + } #[allow(unused_mut)] let mut auth_client_builder = reqwest::Client::builder().default_headers(auth_headers); #[cfg(target_os = "linux")] @@ -551,6 +561,7 @@ async fn create_streamable_http_client( headers: &HashMap, name: &str, socket: Option<&str>, + credential_store: Box, provider: SharedProvider, client_name: String, capabilities: GooseMcpClientCapabilities, @@ -611,7 +622,6 @@ async fn create_streamable_http_client( // If we have stored OAuth credentials, try refreshing and connecting directly. // This avoids the unnecessary 401 → browser re-auth cycle on every new session. - let credential_store = GooseCredentialStore::new(name.to_string()); if credential_store.load().await.is_ok_and(|c| c.is_some()) { match oauth_flow(&uri.to_string(), &name.to_string()).await { Ok(auth_manager) => { @@ -619,6 +629,7 @@ async fn create_streamable_http_client( auth_manager, uri, timeout_duration, + headers, provider, client_name, capabilities, @@ -652,6 +663,7 @@ async fn create_streamable_http_client( auth_manager, uri, timeout_duration, + headers, provider, client_name, capabilities, @@ -854,6 +866,7 @@ impl ExtensionManager { &resolved_headers, name, resolved_socket.as_deref(), + Box::new(GooseCredentialStore::new(name.to_string())), self.provider.clone(), self.client_name.clone(), self.mcp_client_capabilities(), @@ -2711,4 +2724,209 @@ mod tests { ); assert!(should_attempt_oauth_fallback(&Err(err))); } + + #[tokio::test] + async fn test_invalid_header_name_returns_config_error() { + let mut headers = HashMap::new(); + headers.insert("bad header name".to_string(), "value".to_string()); + + let temp_dir = tempdir().unwrap(); + let provider: SharedProvider = Arc::new(Mutex::new(None)); + let capabilities = GooseMcpClientCapabilities { + mcpui: false, + host_info: None, + }; + + let result = create_streamable_http_client( + "http://localhost:1", + None, + &headers, + "test-ext", + None, + Box::new(rmcp::transport::auth::InMemoryCredentialStore::new()), + provider, + "goose-test".to_string(), + capabilities, + temp_dir.path(), + ) + .await; + + let Err(ExtensionError::ConfigError(msg)) = result else { + panic!("expected ConfigError, got a different result"); + }; + assert!( + msg.contains("invalid header"), + "unexpected error message: {msg}" + ); + } + + #[tokio::test] + async fn test_invalid_header_value_returns_config_error() { + let mut headers = HashMap::new(); + headers.insert("x-valid-name".to_string(), "bad\r\nvalue".to_string()); + + let temp_dir = tempdir().unwrap(); + let provider: SharedProvider = Arc::new(Mutex::new(None)); + let capabilities = GooseMcpClientCapabilities { + mcpui: false, + host_info: None, + }; + + let result = create_streamable_http_client( + "http://localhost:1", + None, + &headers, + "test-ext", + None, + Box::new(rmcp::transport::auth::InMemoryCredentialStore::new()), + provider, + "goose-test".to_string(), + capabilities, + temp_dir.path(), + ) + .await; + + let Err(ExtensionError::ConfigError(msg)) = result else { + panic!("expected ConfigError, got a different result"); + }; + assert!( + msg.contains("invalid header value"), + "unexpected error message: {msg}" + ); + } + + #[tokio::test] + async fn test_custom_headers_forwarded_to_http_extension() { + use wiremock::matchers::any; + use wiremock::{Mock, MockServer, ResponseTemplate}; + + let mock_server = MockServer::start().await; + Mock::given(any()) + .respond_with(ResponseTemplate::new(200)) + .mount(&mock_server) + .await; + + let mut headers = HashMap::new(); + headers.insert("x-api-key".to_string(), "test-secret-123".to_string()); + + let temp_dir = tempdir().unwrap(); + let provider: SharedProvider = Arc::new(Mutex::new(None)); + let capabilities = GooseMcpClientCapabilities { + mcpui: false, + host_info: None, + }; + + // The MCP handshake will fail against the stub server. We only care that + // the outgoing HTTP request carried the custom header. + let _ = create_streamable_http_client( + &mock_server.uri(), + None, + &headers, + "test-ext", + None, + Box::new(rmcp::transport::auth::InMemoryCredentialStore::new()), + provider, + "goose-test".to_string(), + capabilities, + temp_dir.path(), + ) + .await; + + let received = mock_server.received_requests().await.unwrap(); + assert!( + !received.is_empty(), + "expected at least one HTTP request to reach the mock server" + ); + let header_found = received.iter().any(|req| { + req.headers + .get("x-api-key") + .map(|v| v == "test-secret-123") + .unwrap_or(false) + }); + assert!( + header_found, + "custom header x-api-key was not forwarded to the extension server" + ); + } + + /// Directly exercises `connect_with_auth`, which is the code path fixed by + /// the PR (custom headers were dropped when the OAuth connection path was + /// taken). Uses a pre-seeded `InMemoryCredentialStore` with a fake, + /// non-expiring token so `get_access_token()` returns immediately without + /// touching any OAuth endpoints or the system keychain. + #[tokio::test] + async fn test_custom_headers_forwarded_oauth_path() { + use rmcp::transport::auth::{ + InMemoryCredentialStore, OAuthTokenResponse, StoredCredentials, + }; + use wiremock::matchers::any; + use wiremock::{Mock, MockServer, ResponseTemplate}; + + let mock_server = MockServer::start().await; + Mock::given(any()) + .respond_with(ResponseTemplate::new(200)) + .mount(&mock_server) + .await; + + let mut headers = HashMap::new(); + headers.insert("x-api-key".to_string(), "test-secret-oauth".to_string()); + + // Build a fake, non-expiring token. token_received_at=None skips the + // expiry check, so get_access_token() returns without any network call. + let token_response: OAuthTokenResponse = serde_json::from_value(serde_json::json!({ + "access_token": "fake-test-token", + "token_type": "bearer", + })) + .expect("valid fake token JSON"); + let creds = StoredCredentials::new( + "test-client".to_string(), + Some(token_response), + vec![], + None, + ); + let store = InMemoryCredentialStore::new(); + store.save(creds).await.unwrap(); + + let mut auth_manager = rmcp::transport::AuthorizationManager::new(mock_server.uri()) + .await + .expect("AuthorizationManager::new should not make network calls"); + auth_manager.set_credential_store(store); + + let temp_dir = tempdir().unwrap(); + let provider: SharedProvider = Arc::new(Mutex::new(None)); + let capabilities = GooseMcpClientCapabilities { + mcpui: false, + host_info: None, + }; + + // connect_with_auth will fail (mock server isn't an MCP server) but we + // only care that the outgoing request carried the custom header. + let _ = connect_with_auth( + auth_manager, + &mock_server.uri(), + Duration::from_secs(5), + &headers, + provider, + "goose-test".to_string(), + capabilities, + temp_dir.path(), + ) + .await; + + let received = mock_server.received_requests().await.unwrap(); + assert!( + !received.is_empty(), + "expected at least one HTTP request to reach the mock server" + ); + let header_found = received.iter().any(|req| { + req.headers + .get("x-api-key") + .map(|v| v == "test-secret-oauth") + .unwrap_or(false) + }); + assert!( + header_found, + "custom header x-api-key was not forwarded through the OAuth connection path" + ); + } } diff --git a/crates/goose/src/hooks/mod.rs b/crates/goose/src/hooks/mod.rs index ae1a2d48bca7..590b2adcf8b4 100644 --- a/crates/goose/src/hooks/mod.rs +++ b/crates/goose/src/hooks/mod.rs @@ -233,6 +233,11 @@ impl HookManager { Self::from_plugins(plugins) } + #[cfg(test)] + pub(crate) fn from_plugins_for_test(plugins: Vec) -> Self { + Self::from_plugins(plugins) + } + fn from_plugins(plugins: Vec) -> Self { let mut rules: HashMap> = HashMap::new(); let mut total = 0usize; @@ -620,6 +625,33 @@ mod tests { assert_eq!(written.trim(), root.to_string_lossy()); } + #[tokio::test] + async fn stop_hook_emit_blocking_returns_denial() { + let tmp = tempfile::tempdir().unwrap(); + let root = write_plugin( + tmp.path(), + "p", + r#"{"hooks":{"Stop":[{"hooks":[{"type":"command","command":"printf '%s' '{\"decision\":\"block\",\"reason\":\"say something first\"}'"}]}]}}"#, + ); + let mgr = make_manager(vec![DiscoveredPlugin { + name: "p".into(), + root, + scope: PluginScope::User, + }]); + + let decision = mgr + .emit_blocking(HookEvent::Stop, HookContext::new(HookEvent::Stop, "s")) + .await; + + assert_eq!( + decision, + HookDecision::Deny { + reason: "say something first".into(), + plugin: "p".into(), + } + ); + } + #[tokio::test] async fn matcher_filters_by_tool_name() { let tmp = tempfile::tempdir().unwrap(); diff --git a/crates/goose/src/model.rs b/crates/goose/src/model.rs index f5e687eaabfa..8109705a6efd 100644 --- a/crates/goose/src/model.rs +++ b/crates/goose/src/model.rs @@ -878,7 +878,7 @@ mod tests { let config = ModelConfig::new_or_fail("gpt-4o").with_canonical_limits("openai"); assert_eq!(config.context_limit, Some(128_000)); - assert_eq!(config.max_tokens, Some(16_384)); + assert_eq!(config.max_tokens, Some(4_096)); assert_eq!(config.reasoning, Some(false)); } diff --git a/crates/goose/src/otel/otlp.rs b/crates/goose/src/otel/otlp.rs index c93049679b65..e86479d06a5c 100644 --- a/crates/goose/src/otel/otlp.rs +++ b/crates/goose/src/otel/otlp.rs @@ -24,6 +24,27 @@ static TRACER_PROVIDER: Mutex> = Mutex::new(None); static METER_PROVIDER: Mutex> = Mutex::new(None); static LOGGER_PROVIDER: Mutex> = Mutex::new(None); +static GRPC_PROTOCOL_WARNING_EMITTED: std::sync::Once = std::sync::Once::new(); + +/// One-shot stderr warning when `OTEL_EXPORTER_OTLP_PROTOCOL=grpc` is set +/// in an environment where goose was built without the `grpc-tonic` +/// transport feature. Using `tracing::warn!` here would race the OTel +/// subscriber that is being initialized; eprintln keeps it visible +/// regardless of subscriber state. +fn warn_grpc_protocol_skipped_once() { + GRPC_PROTOCOL_WARNING_EMITTED.call_once(|| { + eprintln!( + "goose otel: OTEL_EXPORTER_OTLP_PROTOCOL is set to a gRPC \ + variant, but this goose build only includes the HTTP \ + transport (http-proto). OTLP signals are disabled to \ + avoid background-thread panics. Set \ + OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf and point \ + OTEL_EXPORTER_OTLP_ENDPOINT at an http://…:4318 collector \ + to re-enable export." + ); + }); +} + #[derive(Debug, Clone, PartialEq)] pub enum ExporterType { Otlp, @@ -41,6 +62,35 @@ impl ExporterType { } } +/// Resolved transport protocol for an OTLP signal, per OTel spec: +/// signal-specific `OTEL_EXPORTER_OTLP_{SIGNAL}_PROTOCOL` overrides the +/// shared `OTEL_EXPORTER_OTLP_PROTOCOL`, and the default is `http/protobuf` +/// (matching what `.with_http()` produces in this build). +/// +/// goose's `opentelemetry-otlp` build only enables the `http-proto` / +/// `reqwest-client` transport features — not `grpc-tonic`. If the caller's +/// environment sets `…_PROTOCOL=grpc`, the `.with_http()` exporter still +/// builds successfully but its background batch / metric reader threads +/// panic on the first export with +/// `internal error: entered unreachable code: HTTP client should not +/// receive Grpc protocol`. We honour the env var by skipping the signal +/// rather than crashing detached threads. +fn signal_protocol_is_http(signal: &str) -> bool { + let signal_var = format!("OTEL_EXPORTER_OTLP_{}_PROTOCOL", signal.to_uppercase()); + let raw = env::var(&signal_var) + .ok() + .filter(|v| !v.is_empty()) + .or_else(|| env::var("OTEL_EXPORTER_OTLP_PROTOCOL").ok()) + .unwrap_or_default(); + match raw.trim().to_lowercase().as_str() { + // Default per spec when unset — matches `.with_http()`. + "" | "http/protobuf" | "http/json" => true, + // gRPC variants require the `grpc-tonic` feature, which goose + // does not enable. + _ => false, + } +} + /// Returns the exporter type for a signal, or None if disabled. /// /// Checks in order: @@ -148,6 +198,10 @@ fn create_otlp_tracing_layer() -> OtlpResult { let tracer_provider = match exporter { ExporterType::Otlp => { + if !signal_protocol_is_http("traces") { + warn_grpc_protocol_skipped_once(); + return Err("OTLP traces protocol is grpc but goose was built without grpc-tonic; skipping traces exporter".into()); + } let exporter = opentelemetry_otlp::SpanExporter::builder() .with_http() .build()?; @@ -192,6 +246,10 @@ fn create_otlp_metrics_layer() -> OtlpResult { let meter_provider = match exporter { ExporterType::Otlp => { + if !signal_protocol_is_http("metrics") { + warn_grpc_protocol_skipped_once(); + return Err("OTLP metrics protocol is grpc but goose was built without grpc-tonic; skipping metrics exporter".into()); + } let exporter = opentelemetry_otlp::MetricExporter::builder() .with_http() .with_temporality(temporality_preference()) @@ -223,6 +281,10 @@ fn create_otlp_logs_layer() -> OtlpResult { let logger_provider = match exporter { ExporterType::Otlp => { + if !signal_protocol_is_http("logs") { + warn_grpc_protocol_skipped_once(); + return Err("OTLP logs protocol is grpc but goose was built without grpc-tonic; skipping logs exporter".into()); + } let exporter = opentelemetry_otlp::LogExporter::builder() .with_http() .build()?; @@ -458,6 +520,67 @@ mod tests { assert_eq!(signal_exporter(signal), expected); } + #[test_case(&[], true; "default unset is http")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "http/protobuf")], true; "http/protobuf shared")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "http/json")], true; "http/json shared")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "HTTP/PROTOBUF")], true; "case insensitive")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", " http/protobuf ")], true; "trimmed")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "")], true; "empty falls through to default")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc")], false; "shared grpc is not http")] + #[test_case(&[("OTEL_EXPORTER_OTLP_PROTOCOL", "GRPC")], false; "grpc case insensitive")] + fn signal_protocol_is_http_shared(env: &[(&'static str, &'static str)], expected: bool) { + let _guard = clear_otel_env(env); + assert_eq!(signal_protocol_is_http("traces"), expected); + assert_eq!(signal_protocol_is_http("metrics"), expected); + assert_eq!(signal_protocol_is_http("logs"), expected); + } + + #[test_case( + &[("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc"), ("OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", "http/protobuf")], + true, false, false; + "signal override beats shared grpc for traces only" + )] + #[test_case( + &[("OTEL_EXPORTER_OTLP_PROTOCOL", "http/protobuf"), ("OTEL_EXPORTER_OTLP_METRICS_PROTOCOL", "grpc")], + true, false, true; + "signal override flips metrics to grpc" + )] + #[test_case( + &[("OTEL_EXPORTER_OTLP_LOGS_PROTOCOL", "")], + true, true, true; + "empty signal override falls through to default http" + )] + fn signal_protocol_is_http_per_signal( + env: &[(&'static str, &'static str)], + traces: bool, + metrics: bool, + logs: bool, + ) { + let _guard = clear_otel_env(env); + assert_eq!(signal_protocol_is_http("traces"), traces); + assert_eq!(signal_protocol_is_http("metrics"), metrics); + assert_eq!(signal_protocol_is_http("logs"), logs); + } + + /// When `OTEL_EXPORTER_OTLP_PROTOCOL=grpc` is set (matching the + /// Blox + Datadog Agent environment that produced the + /// "HTTP client should not receive Grpc protocol" panic), each + /// signal layer must short-circuit with an error instead of + /// building a panic-prone exporter. + #[test] + fn grpc_protocol_skips_layers() { + let rt = tokio::runtime::Runtime::new().unwrap(); + let _guard = rt.enter(); + let _env = clear_otel_env(&[ + ("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"), + ("OTEL_EXPORTER_OTLP_PROTOCOL", "grpc"), + ]); + assert!(create_otlp_tracing_layer().is_err()); + assert!(create_otlp_metrics_layer().is_err()); + assert!(create_otlp_logs_layer().is_err()); + shutdown_otlp(); + } + #[test_case("console"; "console")] #[test_case("otlp"; "otlp")] fn test_all_layers_ok(exporter: &'static str) { diff --git a/crates/goose/src/providers/canonical/data/canonical_models.json b/crates/goose/src/providers/canonical/data/canonical_models.json index b1cdba60b302..b8ed6d8d98d2 100644 --- a/crates/goose/src/providers/canonical/data/canonical_models.json +++ b/crates/goose/src/providers/canonical/data/canonical_models.json @@ -198,7 +198,7 @@ }, { "id": "302ai/claude-haiku-4.5", - "name": "claude-haiku-4-5-20251001", + "name": "claude-haiku-4-5", "family": "claude-haiku", "attachment": true, "reasoning": true, @@ -320,7 +320,7 @@ }, { "id": "302ai/claude-opus-4.5", - "name": "claude-opus-4-5", + "name": "claude-opus-4-5-20251101", "family": "claude-opus", "attachment": true, "reasoning": true, @@ -505,7 +505,7 @@ }, { "id": "302ai/claude-sonnet-4.5", - "name": "claude-sonnet-4-5-20250929", + "name": "claude-sonnet-4-5", "family": "claude-sonnet", "attachment": true, "reasoning": true, @@ -1982,7 +1982,7 @@ }, { "id": "302ai/gpt-5.4-mini", - "name": "gpt-5.4-mini-2026-03-17", + "name": "gpt-5.4-mini", "family": "gpt-mini", "attachment": true, "reasoning": true, @@ -6261,14 +6261,14 @@ }, { "id": "alibaba-cn/deepseek-r1", - "name": "DeepSeek R1 0528", + "name": "DeepSeek R1", "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2025-05-28", + "release_date": "2025-01-01", + "last_updated": "2025-01-01", "modalities": { "input": [ "text" @@ -11060,6 +11060,38 @@ "output": 128000 } }, + { + "id": "amazon-bedrock/anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "amazon-bedrock/anthropic.claude-sonnet-4.5-20250929-v1:0", "name": "Claude Sonnet 4.5", @@ -11192,6 +11224,38 @@ "output": 128000 } }, + { + "id": "amazon-bedrock/au.anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8 (AU)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "amazon-bedrock/au.anthropic.claude-sonnet-4.5-20250929-v1:0", "name": "Claude Sonnet 4.5 (AU)", @@ -11434,10 +11498,10 @@ }, "open_weights": false, "cost": { - "input": 5.0, - "output": 25.0, - "cache_read": 0.5, - "cache_write": 6.25 + "input": 5.5, + "output": 27.5, + "cache_read": 0.55, + "cache_write": 6.875 }, "limit": { "context": 1000000, @@ -11467,10 +11531,42 @@ }, "open_weights": false, "cost": { - "input": 5.0, - "output": 25.0, - "cache_read": 0.5, - "cache_write": 6.25 + "input": 5.5, + "output": 27.5, + "cache_read": 0.55, + "cache_write": 6.875 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "amazon-bedrock/eu.anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8 (EU)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.5, + "output": 27.5, + "cache_read": 0.55, + "cache_write": 6.875 }, "limit": { "context": 1000000, @@ -11500,10 +11596,10 @@ }, "open_weights": false, "cost": { - "input": 3.0, - "output": 15.0, - "cache_read": 0.3, - "cache_write": 3.75 + "input": 3.3, + "output": 16.5, + "cache_read": 0.33, + "cache_write": 4.125 }, "limit": { "context": 200000, @@ -11533,10 +11629,10 @@ }, "open_weights": false, "cost": { - "input": 3.0, - "output": 15.0, - "cache_read": 0.3, - "cache_write": 3.75 + "input": 3.3, + "output": 16.5, + "cache_read": 0.33, + "cache_write": 4.125 }, "limit": { "context": 1000000, @@ -11675,6 +11771,38 @@ "output": 128000 } }, + { + "id": "amazon-bedrock/global.anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8 (Global)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "amazon-bedrock/global.anthropic.claude-sonnet-4.5-20250929-v1:0", "name": "Claude Sonnet 4.5 (Global)", @@ -11863,6 +11991,38 @@ "output": 128000 } }, + { + "id": "amazon-bedrock/jp.anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8 (JP)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "amazon-bedrock/jp.anthropic.claude-sonnet-4.5-20250929-v1:0", "name": "Claude Sonnet 4.5 (JP)", @@ -13066,6 +13226,38 @@ "output": 128000 } }, + { + "id": "amazon-bedrock/us.anthropic.claude-opus-4.8", + "name": "Claude Opus 4.8 (US)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "amazon-bedrock/us.anthropic.claude-sonnet-4.5-20250929-v1:0", "name": "Claude Sonnet 4.5 (US)", @@ -13625,7 +13817,7 @@ }, { "id": "anthropic/claude-haiku-4.5", - "name": "Claude Haiku 4.5", + "name": "Claude Haiku 4.5 (latest)", "family": "claude-haiku", "attachment": true, "reasoning": true, @@ -13724,7 +13916,7 @@ }, { "id": "anthropic/claude-opus-4.1", - "name": "Claude Opus 4.1 (latest)", + "name": "Claude Opus 4.1", "family": "claude-opus", "attachment": true, "reasoning": true, @@ -13757,15 +13949,15 @@ }, { "id": "anthropic/claude-opus-4.5", - "name": "Claude Opus 4.5 (latest)", + "name": "Claude Opus 4.5", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-11-24", - "last_updated": "2025-11-24", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", "modalities": { "input": [ "text", @@ -13854,6 +14046,38 @@ "output": 128000 } }, + { + "id": "anthropic/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "anthropic/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -13922,7 +14146,7 @@ }, { "id": "anthropic/claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", + "name": "Claude Sonnet 4.5 (latest)", "family": "claude-sonnet", "attachment": true, "reasoning": true, @@ -15000,15 +15224,15 @@ }, { "id": "azure-cognitive-services/deepseek-r1", - "name": "DeepSeek-R1", + "name": "DeepSeek-R1-0528", "family": "deepseek-thinking", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, "knowledge": "2024-07", - "release_date": "2025-01-20", - "last_updated": "2025-01-20", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", "modalities": { "input": [ "text" @@ -15145,15 +15369,15 @@ }, { "id": "azure-cognitive-services/gpt-3.5-turbo", - "name": "GPT-3.5 Turbo 0301", + "name": "GPT-3.5 Turbo 1106", "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, "knowledge": "2021-08", - "release_date": "2023-03-01", - "last_updated": "2023-03-01", + "release_date": "2023-11-06", + "last_updated": "2023-11-06", "modalities": { "input": [ "text" @@ -15164,12 +15388,12 @@ }, "open_weights": false, "cost": { - "input": 1.5, + "input": 1.0, "output": 2.0 }, "limit": { - "context": 4096, - "output": 4096 + "context": 16384, + "output": 16384 } }, { @@ -15405,7 +15629,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -15467,7 +15691,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -16869,7 +17093,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -17110,10 +17334,10 @@ }, { "id": "azure-cognitive-services/phi-4", - "name": "Phi-4", + "name": "Phi-4-reasoning", "family": "phi", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": true, "knowledge": "2023-10", @@ -17133,7 +17357,7 @@ "output": 0.5 }, "limit": { - "context": 128000, + "context": 32000, "output": 4096 } }, @@ -17738,15 +17962,15 @@ }, { "id": "azure/deepseek-r1", - "name": "DeepSeek-R1-0528", + "name": "DeepSeek-R1", "family": "deepseek-thinking", "attachment": false, "reasoning": true, - "tool_call": true, + "tool_call": false, "temperature": true, "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", "modalities": { "input": [ "text" @@ -17883,15 +18107,15 @@ }, { "id": "azure/gpt-3.5-turbo", - "name": "GPT-3.5 Turbo 0613", + "name": "GPT-3.5 Turbo 0301", "family": "gpt", "attachment": false, "reasoning": false, "tool_call": false, "temperature": true, "knowledge": "2021-08", - "release_date": "2023-06-13", - "last_updated": "2023-06-13", + "release_date": "2023-03-01", + "last_updated": "2023-03-01", "modalities": { "input": [ "text" @@ -17902,12 +18126,12 @@ }, "open_weights": false, "cost": { - "input": 3.0, - "output": 4.0 + "input": 1.5, + "output": 2.0 }, "limit": { - "context": 16384, - "output": 16384 + "context": 4096, + "output": 4096 } }, { @@ -18143,7 +18367,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -18205,7 +18429,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -19787,7 +20011,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -20028,10 +20252,10 @@ }, { "id": "azure/phi-4", - "name": "Phi-4-reasoning", + "name": "Phi-4", "family": "phi", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": false, "temperature": true, "knowledge": "2023-10", @@ -20051,7 +20275,7 @@ "output": 0.5 }, "limit": { - "context": 32000, + "context": 128000, "output": 4096 } }, @@ -20959,35 +21183,6 @@ "output": 8000 } }, - { - "id": "cerebras/qwen-3-235b-a22b-instruct", - "name": "Qwen 3 235B Instruct", - "family": "qwen", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-22", - "last_updated": "2025-07-22", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.6, - "output": 1.2 - }, - "limit": { - "context": 131000, - "output": 32000 - } - }, { "id": "cerebras/zai-glm-4.7", "name": "Z.AI GLM-4.7", @@ -23043,6 +23238,38 @@ "output": 128000 } }, + { + "id": "cloudflare-ai-gateway/anthropic/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "cloudflare-ai-gateway/anthropic/claude-sonnet-4", "name": "Claude Sonnet 4 (latest)", @@ -24933,6 +25160,7 @@ } }, { +<<<<<<< HEAD "id": "cloudflare-workers-ai/@cf/google/gemma-3-12b-it", "name": "Gemma 3 12B It", "family": "gemma", @@ -24961,6 +25189,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "cloudflare-workers-ai/@cf/google/gemma-4-26b-a4b-it", "name": "Gemma 4 26B A4B IT", "family": "gemma", @@ -25018,6 +25248,7 @@ } }, { +<<<<<<< HEAD "id": "cloudflare-workers-ai/@cf/meta/llama-2-7b-chat-fp16", "name": "Llama 2 7B Chat fp16", "family": "llama", @@ -25130,6 +25361,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "cloudflare-workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8", "name": "Llama 3.1 8B Instruct fp8", "family": "llama", @@ -25306,6 +25539,7 @@ "attachment": false, "reasoning": false, "tool_call": false, +<<<<<<< HEAD "temperature": true, "release_date": "2025-01-22", "last_updated": "2025-01-22", @@ -25390,14 +25624,14 @@ "attachment": true, "reasoning": true, "tool_call": true, +======= +>>>>>>> upstream/main "temperature": true, - "knowledge": "2025-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", + "release_date": "2025-01-22", + "last_updated": "2025-01-22", "modalities": { "input": [ - "text", - "image" + "text" ], "output": [ "text" @@ -25405,13 +25639,40 @@ }, "open_weights": true, "cost": { - "input": 0.6, - "output": 3.0, - "cache_read": 0.1 + "input": 0.484, + "output": 0.03 }, "limit": { - "context": 256000, - "output": 256000 + "context": 131072, + "output": 131072 + } + }, + { + "id": "cloudflare-workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", + "name": "Mistral Small 3.1 24B Instruct", + "family": "mistral-small", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-03-18", + "last_updated": "2025-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.351, + "output": 0.555 + }, + "limit": { + "context": 128000, + "output": 128000 } }, { @@ -28633,7 +28894,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.13 + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -29521,15 +29782,15 @@ }, { "id": "deepinfra/moonshotai/Kimi-K2-Instruct", - "name": "Kimi K2 0905", + "name": "Kimi K2", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-10", - "release_date": "2025-09-05", - "last_updated": "2025-09-05", + "release_date": "2025-07-11", + "last_updated": "2025-07-11", "modalities": { "input": [ "text" @@ -29540,13 +29801,12 @@ }, "open_weights": true, "cost": { - "input": 0.4, - "output": 2.0, - "cache_read": 0.15 + "input": 0.5, + "output": 2.0 }, "limit": { - "context": 262144, - "output": 262144 + "context": 131072, + "output": 32768 } }, { @@ -30567,6 +30827,37 @@ "output": 128000 } }, + { + "id": "digitalocean/anthropic-claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-29", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "digitalocean/anthropic-claude-sonnet-4", "name": "Claude Sonnet 4", @@ -30714,6 +31005,31 @@ "output": 64000 } }, + { + "id": "digitalocean/deepseek-4-flash", + "name": "Deepseek V4 Flash", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-27", + "last_updated": "2026-05-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 262144, + "output": 8192 + } + }, { "id": "digitalocean/deepseek-r1-distill-llama-70b", "name": "DeepSeek R1 Distill Llama 70B", @@ -34766,8 +35082,8 @@ "output": 0.0 }, "limit": { - "context": 144000, - "output": 32000 + "context": 200000, + "output": 64000 } }, { @@ -34796,7 +35112,7 @@ "output": 0.0 }, "limit": { - "context": 160000, + "context": 200000, "output": 32000 } }, @@ -34826,8 +35142,8 @@ "output": 0.0 }, "limit": { - "context": 144000, - "output": 64000 + "context": 200000, + "output": 32000 } }, { @@ -34856,7 +35172,37 @@ "output": 0.0 }, "limit": { - "context": 144000, + "context": 200000, + "output": 32000 + } + }, + { + "id": "github-copilot/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 200000, "output": 64000 } }, @@ -34946,7 +35292,7 @@ "output": 0.0 }, "limit": { - "context": 144000, + "context": 200000, "output": 32000 } }, @@ -35102,7 +35448,39 @@ "output": 0.0 }, "limit": { - "context": 128000, + "context": 200000, + "output": 64000 + } + }, + { + "id": "github-copilot/gemini-3.5-flash", + "name": "Gemini 3.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-19", + "last_updated": "2026-05-19", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 200000, "output": 64000 } }, @@ -35404,8 +35782,8 @@ "output": 0.0 }, "limit": { - "context": 264000, - "output": 64000 + "context": 400000, + "output": 128000 } }, { @@ -35821,15 +36199,15 @@ }, { "id": "github-models/deepseek/deepseek-r1", - "name": "DeepSeek-R1-0528", + "name": "DeepSeek-R1", "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2024-06", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", "modalities": { "input": [ "text" @@ -36466,7 +36844,7 @@ }, { "id": "github-models/microsoft/phi-4", - "name": "Phi-4-Reasoning", + "name": "Phi-4", "family": "phi", "attachment": false, "reasoning": true, @@ -36489,7 +36867,7 @@ "output": 0.0 }, "limit": { - "context": 128000, + "context": 16000, "output": 4096 } }, @@ -37581,6 +37959,39 @@ "output": 64000 } }, + { + "id": "gitlab/duo-chat-opus-4.8", + "name": "Agentic Chat (Claude Opus 4.8)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0, + "cache_write": 0.0 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "gitlab/duo-chat-sonnet-4.5", "name": "Agentic Chat (Claude Sonnet 4.5)", @@ -38182,6 +38593,38 @@ "output": 128000 } }, + { + "id": "google-vertex-anthropic/claude-opus-4.8@default", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "google-vertex-anthropic/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -38578,6 +39021,38 @@ "output": 128000 } }, + { + "id": "google-vertex/claude-opus-4.8@default", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "google-vertex/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -40745,15 +41220,15 @@ }, { "id": "groq/moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", + "name": "Kimi K2 Instruct 0905", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-10", - "release_date": "2025-07-14", - "last_updated": "2025-07-14", + "release_date": "2025-09-05", + "last_updated": "2026-05-27", "modalities": { "input": [ "text" @@ -40765,10 +41240,11 @@ "open_weights": true, "cost": { "input": 1.0, - "output": 3.0 + "output": 3.0, + "cache_read": 0.5 }, "limit": { - "context": 131072, + "context": 262144, "output": 16384 } }, @@ -40781,7 +41257,7 @@ "tool_call": true, "temperature": true, "release_date": "2025-08-05", - "last_updated": "2025-08-05", + "last_updated": "2026-05-27", "modalities": { "input": [ "text" @@ -40793,7 +41269,8 @@ "open_weights": true, "cost": { "input": 0.15, - "output": 0.6 + "output": 0.6, + "cache_read": 0.075 }, "limit": { "context": 131072, @@ -40809,7 +41286,7 @@ "tool_call": true, "temperature": true, "release_date": "2025-08-05", - "last_updated": "2025-08-05", + "last_updated": "2026-05-27", "modalities": { "input": [ "text" @@ -40821,7 +41298,8 @@ "open_weights": true, "cost": { "input": 0.075, - "output": 0.3 + "output": 0.3, + "cache_read": 0.0375 }, "limit": { "context": 131072, @@ -41294,7 +41772,7 @@ }, { "id": "helicone/claude-opus-4.1", - "name": "Anthropic: Claude Opus 4.1", + "name": "Anthropic: Claude Opus 4.1 (20250805)", "family": "claude-opus", "attachment": false, "reasoning": true, @@ -42612,15 +43090,15 @@ }, { "id": "helicone/kimi-k2", - "name": "Kimi K2 (07/11)", + "name": "Kimi K2 (09/05)", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-01", - "release_date": "2025-01-01", - "last_updated": "2025-01-01", + "knowledge": "2025-09", + "release_date": "2025-09-05", + "last_updated": "2025-09-05", "modalities": { "input": [ "text" @@ -42631,11 +43109,12 @@ }, "open_weights": false, "cost": { - "input": 0.5700000000000001, - "output": 2.3 + "input": 0.5, + "output": 2.0, + "cache_read": 0.39999999999999997 }, "limit": { - "context": 131072, + "context": 262144, "output": 16384 } }, @@ -43022,15 +43501,15 @@ }, { "id": "helicone/mistral-small", - "name": "Mistral Small", + "name": "Mistral Small 3.2", "family": "mistral-small", "attachment": false, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2024-02", - "release_date": "2024-02-26", - "last_updated": "2024-02-26", + "knowledge": "2025-03", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", "modalities": { "input": [ "text", @@ -43040,14 +43519,14 @@ "text" ] }, - "open_weights": false, + "open_weights": true, "cost": { - "input": 75.0, - "output": 200.0 + "input": 0.075, + "output": 0.2 }, "limit": { "context": 128000, - "output": 128000 + "output": 16384 } }, { @@ -43476,10 +43955,10 @@ }, { "id": "helicone/sonar", - "name": "Perplexity Sonar", - "family": "sonar", + "name": "Perplexity Sonar Reasoning", + "family": "sonar-reasoning", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": true, "knowledge": "2025-01", @@ -43496,7 +43975,7 @@ "open_weights": false, "cost": { "input": 1.0, - "output": 1.0 + "output": 5.0 }, "limit": { "context": 127000, @@ -43599,7 +44078,7 @@ "tool_call": true, "temperature": true, "release_date": "2026-02-12", - "last_updated": "2026-03-25", + "last_updated": "2026-06-01", "modalities": { "input": [ "text" @@ -43610,9 +44089,9 @@ }, "open_weights": true, "cost": { - "input": 0.14, - "output": 0.56, - "cache_read": 0.014 + "input": 0.3, + "output": 1.2, + "cache_read": 0.03 }, "limit": { "context": 1000000, @@ -43629,7 +44108,7 @@ "temperature": false, "knowledge": "2025-01-01", "release_date": "2026-01-01", - "last_updated": "2026-03-25", + "last_updated": "2026-06-01", "modalities": { "input": [ "text", @@ -43642,9 +44121,9 @@ }, "open_weights": true, "cost": { - "input": 0.21, - "output": 1.0, - "cache_read": 0.03 + "input": 0.3, + "output": 1.5, + "cache_read": 0.05 }, "limit": { "context": 262144, @@ -43660,7 +44139,7 @@ "tool_call": true, "temperature": true, "release_date": "2026-04-08", - "last_updated": "2026-04-08", + "last_updated": "2026-06-01", "modalities": { "input": [ "text" @@ -43671,9 +44150,9 @@ }, "open_weights": true, "cost": { - "input": 0.66, - "output": 2.0, - "cache_read": 0.12 + "input": 0.615, + "output": 2.46, + "cache_read": 0.133 }, "limit": { "context": 202000, @@ -44119,15 +44598,15 @@ }, { "id": "huggingface/moonshotai/Kimi-K2-Instruct", - "name": "Kimi-K2-Instruct-0905", + "name": "Kimi-K2-Instruct", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-10", - "release_date": "2025-09-04", - "last_updated": "2025-09-04", + "release_date": "2025-07-14", + "last_updated": "2025-07-14", "modalities": { "input": [ "text" @@ -44142,7 +44621,7 @@ "output": 3.0 }, "limit": { - "context": 262144, + "context": 131072, "output": 16384 } }, @@ -47641,33 +48120,6 @@ "output": 4096 } }, - { - "id": "kilo/alibaba/tongyi-deepresearch-30b-a3b", - "name": "Tongyi DeepResearch 30B A3B", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2025-09-18", - "last_updated": "2026-03-15", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.09, - "output": 0.45 - }, - "limit": { - "context": 131072, - "output": 131072 - } - }, { "id": "kilo/allenai/olmo-3-32b-think", "name": "AllenAI: Olmo 3 32B Think", @@ -48343,33 +48795,6 @@ "output": 65537 } }, - { - "id": "kilo/arcee-ai/trinity-large-preview", - "name": "Arcee AI: Trinity Large Preview", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "release_date": "2026-01-28", - "last_updated": "2026-05-01", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.15, - "output": 0.45 - }, - "limit": { - "context": 131000, - "output": 32768 - } - }, { "id": "kilo/arcee-ai/trinity-large-thinking", "name": "Arcee AI: Trinity Large Thinking", @@ -49007,13 +49432,13 @@ }, { "id": "kilo/deepseek/deepseek-r1", - "name": "DeepSeek: R1 0528", + "name": "DeepSeek: R1", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-05-28", - "last_updated": "2026-03-15", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", "modalities": { "input": [ "text" @@ -49024,13 +49449,12 @@ }, "open_weights": true, "cost": { - "input": 0.45, - "output": 2.15, - "cache_read": 0.2 + "input": 0.7, + "output": 2.5 }, "limit": { - "context": 163840, - "output": 65536 + "context": 64000, + "output": 16000 } }, { @@ -49227,33 +49651,6 @@ "output": 384000 } }, - { - "id": "kilo/deepseek/deepseek-v4-flash:free", - "name": "DeepSeek: DeepSeek V4 Flash (free)", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-04-24", - "last_updated": "2026-05-16", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0 - }, - "limit": { - "context": 1048576, - "output": 384000 - } - }, { "id": "kilo/deepseek/deepseek-v4-pro", "name": "DeepSeek: DeepSeek V4 Pro", @@ -49816,6 +50213,39 @@ "output": 65536 } }, + { + "id": "kilo/google/gemini-3.5-flash", + "name": "Google: Gemini 3.5 Flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-19", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "audio", + "image", + "pdf", + "text", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.5, + "output": 9.0, + "cache_read": 0.15, + "cache_write": 0.08333 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, { "id": "kilo/google/gemma-2-27b-it", "name": "Google: Gemma 2 27B", @@ -51339,16 +51769,17 @@ }, { "id": "kilo/mistralai/mistral-large", - "name": "Mistral Large", - "attachment": false, + "name": "Mistral: Mistral Large 3 2512", + "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-07-24", - "last_updated": "2025-12-02", + "release_date": "2024-11-01", + "last_updated": "2025-12-16", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" @@ -51356,12 +51787,12 @@ }, "open_weights": true, "cost": { - "input": 2.0, - "output": 6.0 + "input": 0.5, + "output": 1.5 }, "limit": { - "context": 128000, - "output": 25600 + "context": 262144, + "output": 52429 } }, { @@ -52476,12 +52907,12 @@ }, { "id": "kilo/openai/gpt-4o", - "name": "OpenAI: GPT-4o (2024-08-06)", + "name": "OpenAI: GPT-4o (2024-05-13)", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2024-08-06", + "release_date": "2024-05-13", "last_updated": "2026-03-15", "modalities": { "input": [ @@ -52495,13 +52926,12 @@ }, "open_weights": false, "cost": { - "input": 2.5, - "output": 10.0, - "cache_read": 1.25 + "input": 5.0, + "output": 15.0 }, "limit": { "context": 128000, - "output": 16384 + "output": 4096 } }, { @@ -52535,7 +52965,7 @@ }, { "id": "kilo/openai/gpt-4o-mini", - "name": "OpenAI: GPT-4o-mini (2024-07-18)", + "name": "OpenAI: GPT-4o-mini", "attachment": true, "reasoning": false, "tool_call": true, @@ -52555,7 +52985,8 @@ "open_weights": false, "cost": { "input": 0.15, - "output": 0.6 + "output": 0.6, + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -54428,13 +54859,13 @@ }, { "id": "kilo/qwen/qwen3-235b-a22b", - "name": "Qwen: Qwen3 235B A22B", + "name": "Qwen: Qwen3 235B A22B Instruct 2507", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-12-01", - "last_updated": "2026-03-15", + "release_date": "2025-04", + "last_updated": "2026-01", "modalities": { "input": [ "text" @@ -54445,13 +54876,12 @@ }, "open_weights": true, "cost": { - "input": 0.455, - "output": 1.82, - "cache_read": 0.15 + "input": 0.071, + "output": 0.1 }, "limit": { - "context": 131072, - "output": 8192 + "context": 262144, + "output": 52429 } }, { @@ -55444,6 +55874,35 @@ "output": 65536 } }, + { + "id": "kilo/qwen/qwen3.7-max", + "name": "Qwen: Qwen3.7 Max", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-26", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.625, + "output": 4.875, + "cache_read": 0.1625, + "cache_write": 2.03125 + }, + "limit": { + "context": 1000000, + "output": 65536 + } + }, { "id": "kilo/rekaai/reka-edge", "name": "Reka Edge", @@ -55689,44 +56148,80 @@ } }, { - "id": "kilo/stepfun/step-3.5-flash", - "name": "StepFun: Step 3.5 Flash", - "attachment": false, + "id": "kilo/stealth/claude-opus-4.6", + "name": "Stealth: Claude Opus 4.6 (20% off)", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-01-29", - "last_updated": "2026-01-29", + "release_date": "2026-02-05", + "last_updated": "2026-05-27", "modalities": { "input": [ + "image", + "pdf", "text" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.1, - "output": 0.3, - "cache_read": 0.02 + "input": 4.0, + "output": 20.0, + "cache_read": 0.4, + "cache_write": 5.0 }, "limit": { - "context": 256000, - "output": 256000 + "context": 1000000, + "output": 128000 } }, { - "id": "kilo/stepfun/step-3.5-flash:free", - "name": "StepFun: Step 3.5 Flash (free)", - "attachment": false, + "id": "kilo/stealth/claude-opus-4.7", + "name": "Stealth: Claude Opus 4.7 (20% off)", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-04-16", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "image", + "pdf", + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 4.0, + "output": 20.0, + "cache_read": 0.4, + "cache_write": 5.0 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "kilo/stealth/claude-sonnet-4.6", + "name": "Stealth: Claude Sonnet 4.6 (20% off)", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-26", - "last_updated": "2026-05-01", + "release_date": "2026-02-17", + "last_updated": "2026-05-27", "modalities": { "input": [ + "image", + "pdf", "text" ], "output": [ @@ -55735,12 +56230,42 @@ }, "open_weights": false, "cost": { - "input": 0.0, - "output": 0.0 + "input": 2.4, + "output": 12.0, + "cache_read": 0.24, + "cache_write": 3.0 }, "limit": { - "context": 262144, - "output": 262144 + "context": 1000000, + "output": 64000 + } + }, + { + "id": "kilo/stepfun/step-3.5-flash", + "name": "StepFun: Step 3.5 Flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-01-29", + "last_updated": "2026-01-29", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 + }, + "limit": { + "context": 256000, + "output": 256000 } }, { @@ -56105,16 +56630,17 @@ } }, { - "id": "kilo/x-ai/grok-code-fast-1:optimized:free", - "name": "xAI: Grok Code Fast 1 Optimized (experimental, free)", - "attachment": false, + "id": "kilo/x-ai/grok-build-0.1", + "name": "xAI: Grok Build 0.1", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-08-27", - "last_updated": "2026-03-15", + "release_date": "2026-05-20", + "last_updated": "2026-05-27", "modalities": { "input": [ + "image", "text" ], "output": [ @@ -56123,12 +56649,13 @@ }, "open_weights": false, "cost": { - "input": 0.0, - "output": 0.0 + "input": 1.0, + "output": 2.0, + "cache_read": 0.2 }, "limit": { "context": 256000, - "output": 10000 + "output": 256000 } }, { @@ -57279,7 +57806,7 @@ }, { "id": "llmgateway/claude-haiku-4.5", - "name": "Claude Haiku 4.5", + "name": "Claude Haiku 4.5 (latest)", "family": "claude-haiku", "attachment": true, "reasoning": true, @@ -57475,6 +58002,38 @@ "output": 128000 } }, + { + "id": "llmgateway/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "llmgateway/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -57510,7 +58069,7 @@ }, { "id": "llmgateway/claude-sonnet-4.5", - "name": "Claude Sonnet 4.5", + "name": "Claude Sonnet 4.5 (latest)", "family": "claude-sonnet", "attachment": true, "reasoning": true, @@ -58798,7 +59357,7 @@ "cost": { "input": 0.5, "output": 1.5, - "cache_read": 1.25 + "cache_read": 0.0 }, "limit": { "context": 16385, @@ -58952,7 +59511,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -59016,7 +59575,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -59135,7 +59694,8 @@ "open_weights": false, "cost": { "input": 1.25, - "output": 10.0 + "output": 10.0, + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -59258,7 +59818,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.13 + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -61146,7 +61706,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -62287,56 +62847,2357 @@ "cache_write": 0.625 }, "limit": { - "context": 1000000, - "output": 65536 + "context": 1000000, + "output": 65536 + } + }, + { + "id": "llmgateway/qwen3.7-max", + "name": "Qwen3.7 Max", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-21", + "last_updated": "2026-05-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.5, + "output": 7.5, + "cache_read": 0.5, + "cache_write": 3.125 + }, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + { + "id": "llmgateway/qwen35-397b-a17b", + "name": "Qwen3.5 397B-A17B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-15", + "last_updated": "2026-02-15", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 3.6 + }, + "limit": { + "context": 262144, + "output": 65536 + } + }, + { + "id": "llmgateway/qwq-plus", + "name": "QwQ Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-03-05", + "last_updated": "2025-03-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.8, + "output": 2.4 + }, + "limit": { + "context": 131072, + "output": 8192 + } + }, + { + "id": "llmgateway/seed-1.6-250615", + "name": "Seed 1.6 (250615)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-06-25", + "last_updated": "2025-06-25", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.25, + "output": 2.0, + "cache_read": 0.05 + }, + "limit": { + "context": 256000, + "output": 8192 + } + }, + { + "id": "llmgateway/seed-1.6-250915", + "name": "Seed 1.6 (250915)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-09-15", + "last_updated": "2025-09-15", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.25, + "output": 2.0, + "cache_read": 0.05 + }, + "limit": { + "context": 256000, + "output": 8192 + } + }, + { + "id": "llmgateway/seed-1.6-flash-250715", + "name": "Seed 1.6 Flash (250715)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-07-26", + "last_updated": "2025-07-26", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.07, + "output": 0.3, + "cache_read": 0.01 + }, + "limit": { + "context": 256000, + "output": 8192 + } + }, + { + "id": "llmgateway/seed-1.8-251228", + "name": "Seed 1.8 (251228)", + "family": "seed", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-18", + "last_updated": "2025-12-18", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.25, + "output": 2.0, + "cache_read": 0.05 + }, + "limit": { + "context": 256000, + "output": 8192 + } + }, + { + "id": "llmgateway/sonar", + "name": "Sonar", + "family": "sonar", + "attachment": false, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.0, + "output": 1.0 + }, + "limit": { + "context": 128000, + "output": 4096 + } + }, + { + "id": "llmgateway/sonar-pro", + "name": "Sonar Pro", + "family": "sonar-pro", + "attachment": true, + "reasoning": false, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3.0, + "output": 15.0 + }, + "limit": { + "context": 200000, + "output": 8192 + } + }, + { + "id": "llmgateway/sonar-reasoning-pro", + "name": "Sonar Reasoning Pro", + "family": "sonar-reasoning", + "attachment": true, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2025-09-01", + "release_date": "2024-01-01", + "last_updated": "2025-09-01", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 8.0 + }, + "limit": { + "context": 128000, + "output": 4096 + } + }, + { + "id": "lmstudio/openai/gpt-oss-20b", + "name": "GPT OSS 20B", + "family": "gpt-oss", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 131072, + "output": 32768 + } + }, + { + "id": "lmstudio/qwen/qwen3-30b-a3b", + "name": "Qwen3 30B A3B 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-30", + "last_updated": "2025-07-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 262144, + "output": 16384 + } + }, + { + "id": "lmstudio/qwen/qwen3-coder-30b", + "name": "Qwen3 Coder 30B", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 262144, + "output": 65536 + } + }, + { + "id": "lucidquery/lucidnova-rf1-100b", + "name": "LucidNova RF1 100B", + "family": "nova", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-09-16", + "release_date": "2024-12-28", + "last_updated": "2025-09-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 5.0 + }, + "limit": { + "context": 120000, + "output": 8000 + } + }, + { + "id": "lucidquery/lucidquery-nexus-coder", + "name": "LucidQuery Nexus Coder", + "family": "lucid", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-01", + "release_date": "2025-09-01", + "last_updated": "2025-09-01", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 5.0 + }, + "limit": { + "context": 250000, + "output": 60000 + } + }, + { + "id": "meganova/MiniMaxAI/MiniMax-M2.1", + "name": "MiniMax M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.28, + "output": 1.2 + }, + "limit": { + "context": 196608, + "output": 131072 + } + }, + { + "id": "meganova/MiniMaxAI/MiniMax-M2.5", + "name": "MiniMax M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "meganova/Qwen/Qwen2.5-VL-32B-Instruct", + "name": "Qwen2.5 VL 32B Instruct", + "family": "qwen", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 0.6 + }, + "limit": { + "context": 16384, + "output": 16384 + } + }, + { + "id": "meganova/Qwen/Qwen3-235B-A22B-Instruct", + "name": "Qwen3 235B A22B Instruct 2507", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-07-23", + "last_updated": "2025-07-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.09, + "output": 0.6 + }, + "limit": { + "context": 262000, + "output": 262000 + } + }, + { + "id": "meganova/Qwen/Qwen3.5-Plus", + "name": "Qwen3.5 Plus", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-02", + "last_updated": "2026-02", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.4, + "output": 2.4 + }, + "limit": { + "context": 1000000, + "output": 65536 + } + }, + { + "id": "meganova/XiaomiMiMo/MiMo-V2-Flash", + "name": "MiMo V2 Flash", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.1, + "output": 0.3 + }, + "limit": { + "context": 262144, + "output": 32000 + } + }, + { + "id": "meganova/deepseek-ai/DeepSeek-R1", + "name": "DeepSeek R1 0528", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": false, + "temperature": true, + "knowledge": "2024-07", + "release_date": "2025-05-28", + "last_updated": "2025-05-28", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.5, + "output": 2.15 + }, + "limit": { + "context": 163840, + "output": 64000 + } + }, + { + "id": "meganova/deepseek-ai/DeepSeek-V3", + "name": "DeepSeek V3 0324", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-03-24", + "last_updated": "2025-03-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.25, + "output": 0.88 + }, + "limit": { + "context": 163840, + "output": 163840 + } + }, + { + "id": "meganova/deepseek-ai/DeepSeek-V3.1", + "name": "DeepSeek V3.1", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-08-25", + "last_updated": "2025-08-25", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.27, + "output": 1.0 + }, + "limit": { + "context": 164000, + "output": 164000 + } + }, + { + "id": "meganova/deepseek-ai/DeepSeek-V3.2", + "name": "DeepSeek V3.2", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-03", + "last_updated": "2025-12-03", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.26, + "output": 0.38 + }, + "limit": { + "context": 164000, + "output": 164000 + } + }, + { + "id": "meganova/deepseek-ai/DeepSeek-V3.2-Exp", + "name": "DeepSeek V3.2 Exp", + "family": "deepseek", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-10", + "last_updated": "2025-10-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.27, + "output": 0.4 + }, + "limit": { + "context": 164000, + "output": 164000 + } + }, + { + "id": "meganova/meta-llama/Llama-3.3-70B-Instruct", + "name": "Llama 3.3 70B Instruct", + "family": "llama", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2024-12-06", + "last_updated": "2024-12-06", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.1, + "output": 0.3 + }, + "limit": { + "context": 131072, + "output": 16384 + } + }, + { + "id": "meganova/mistralai/Mistral-Nemo-Instruct", + "name": "Mistral Nemo Instruct 2407", + "family": "mistral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2024-07-18", + "last_updated": "2024-07-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.02, + "output": 0.04 + }, + "limit": { + "context": 131072, + "output": 65536 + } + }, + { + "id": "meganova/mistralai/Mistral-Small-3.2-24B-Instruct", + "name": "Mistral Small 3.2 24B Instruct", + "family": "mistral-small", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2025-06-20", + "last_updated": "2025-06-20", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 32768, + "output": 8192 + } + }, + { + "id": "meganova/moonshotai/Kimi-K2-Thinking", + "name": "Kimi K2 Thinking", + "family": "kimi-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-08", + "release_date": "2025-11-06", + "last_updated": "2025-11-06", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.6 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + { + "id": "meganova/moonshotai/Kimi-K2.5", + "name": "Kimi K2.5", + "family": "kimi", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2026-01", + "release_date": "2026-01-27", + "last_updated": "2026-01-27", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.45, + "output": 2.8 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + { + "id": "meganova/zai-org/GLM-4.6", + "name": "GLM-4.6", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.45, + "output": 1.9 + }, + "limit": { + "context": 202752, + "output": 131072 + } + }, + { + "id": "meganova/zai-org/GLM-4.7", + "name": "GLM-4.7", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.2, + "output": 0.8 + }, + "limit": { + "context": 202752, + "output": 131072 + } + }, + { + "id": "meganova/zai-org/GLM-5", + "name": "GLM-5", + "family": "glm", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-11", + "last_updated": "2026-02-11", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.8, + "output": 2.56 + }, + "limit": { + "context": 202752, + "output": 131072 + } + }, + { + "id": "merge-gateway/anthropic/claude-haiku-4.5", + "name": "Claude Haiku 4.5", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.0, + "output": 5.0, + "cache_read": 0.1, + "cache_write": 1.25 + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + { + "id": "merge-gateway/anthropic/claude-opus-4", + "name": "Claude Opus 4", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15.0, + "output": 75.0, + "cache_read": 1.5, + "cache_write": 18.75 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, + { + "id": "merge-gateway/anthropic/claude-opus-4.1", + "name": "Claude Opus 4.1", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 15.0, + "output": 75.0, + "cache_read": 1.5, + "cache_write": 18.75 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, + { + "id": "merge-gateway/anthropic/claude-opus-4.5", + "name": "Claude Opus 4.5", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-11-01", + "last_updated": "2025-11-01", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + { + "id": "merge-gateway/anthropic/claude-opus-4.6", + "name": "Claude Opus 4.6", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05-31", + "release_date": "2026-02-05", + "last_updated": "2026-03-13", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "merge-gateway/anthropic/claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "merge-gateway/anthropic/claude-sonnet-4", + "name": "Claude Sonnet 4", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-03-31", + "release_date": "2025-05-22", + "last_updated": "2025-05-22", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3.0, + "output": 15.0, + "cache_read": 0.3, + "cache_write": 3.75 + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + { + "id": "merge-gateway/anthropic/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3.0, + "output": 15.0, + "cache_read": 0.3, + "cache_write": 3.75 + }, + "limit": { + "context": 200000, + "output": 64000 + } + }, + { + "id": "merge-gateway/anthropic/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 3.0, + "output": 15.0, + "cache_read": 0.3, + "cache_write": 3.75 + }, + "limit": { + "context": 1000000, + "output": 64000 + } + }, + { + "id": "merge-gateway/cohere/command-a-03", + "name": "Command A", + "family": "command-a", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2025-03-13", + "last_updated": "2025-03-13", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 2.5, + "output": 10.0 + }, + "limit": { + "context": 256000, + "output": 8000 + } + }, + { + "id": "merge-gateway/cohere/command-r-08", + "name": "Command R", + "family": "command-r", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.15, + "output": 0.6 + }, + "limit": { + "context": 128000, + "output": 4000 + } + }, + { + "id": "merge-gateway/cohere/command-r-plus-08", + "name": "Command R+", + "family": "command-r", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2024-08-30", + "last_updated": "2024-08-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 2.5, + "output": 10.0 + }, + "limit": { + "context": 128000, + "output": 4000 + } + }, + { + "id": "merge-gateway/cohere/command-r7b-12", + "name": "Command R7B", + "family": "command-r", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-06-01", + "release_date": "2024-02-27", + "last_updated": "2024-02-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0375, + "output": 0.15 + }, + "limit": { + "context": 128000, + "output": 4000 + } + }, + { + "id": "merge-gateway/deepseek/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.0028 + }, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + { + "id": "merge-gateway/deepseek/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.435, + "output": 0.87, + "cache_read": 0.003625 + }, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + { + "id": "merge-gateway/google/gemini-2.5-flash", + "name": "Gemini 2.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.03 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-2.5-flash-lite", + "name": "Gemini 2.5 Flash-Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-06-17", + "last_updated": "2025-06-17", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.01 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-2.5-pro", + "name": "Gemini 2.5 Pro", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-03-20", + "last_updated": "2025-06-05", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 10.0, + "cache_read": 0.125 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3-flash-preview", + "name": "Gemini 3 Flash Preview", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-12-17", + "last_updated": "2025-12-17", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.5, + "output": 3.0, + "cache_read": 0.05 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3-pro-preview", + "name": "Gemini 3 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-11-18", + "last_updated": "2025-11-18", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 12.0, + "cache_read": 0.2 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3.1-flash-lite", + "name": "Gemini 3.1 Flash Lite", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-07", + "last_updated": "2026-05-07", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3.1-flash-lite-preview", + "name": "Gemini 3.1 Flash Lite Preview", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.25, + "output": 1.5, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3.1-pro-preview", + "name": "Gemini 3.1 Pro Preview", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 12.0, + "cache_read": 0.2 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3.1-pro-preview-customtools", + "name": "Gemini 3.1 Pro Preview Custom Tools", + "family": "gemini-pro", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-02-19", + "last_updated": "2026-02-19", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 12.0, + "cache_read": 0.2 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-3.5-flash", + "name": "Gemini 3.5 Flash", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-19", + "last_updated": "2026-05-19", + "modalities": { + "input": [ + "text", + "image", + "video", + "audio", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.5, + "output": 9.0, + "cache_read": 0.15 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-flash", + "name": "Gemini Flash Latest", + "family": "gemini-flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.075 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemini-flash-lite", + "name": "Gemini Flash-Lite Latest", + "family": "gemini-flash-lite", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2025-09-25", + "last_updated": "2025-09-25", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 + }, + "limit": { + "context": 1048576, + "output": 65536 + } + }, + { + "id": "merge-gateway/google/gemma-4-26b-a4b-it", + "name": "Gemma 4 26B A4B IT", + "family": "gemma", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": {}, + "limit": { + "context": 262144, + "output": 32768 + } + }, + { + "id": "merge-gateway/google/gemma-4-31b-it", + "name": "Gemma 4 31B IT", + "family": "gemma", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-02", + "last_updated": "2026-04-02", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": {}, + "limit": { + "context": 262144, + "output": 32768 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2", + "name": "MiniMax-M2", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-10-27", + "last_updated": "2025-10-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2 + }, + "limit": { + "context": 196608, + "output": 128000 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2.1", + "name": "MiniMax-M2.1", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2025-12-23", + "last_updated": "2025-12-23", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2.5", + "name": "MiniMax-M2.5", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-12", + "last_updated": "2026-02-12", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.03, + "cache_write": 0.375 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2.5-highspeed", + "name": "MiniMax-M2.5-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-02-13", + "last_updated": "2026-02-13", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2.7", + "name": "MiniMax-M2.7", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06, + "cache_write": 0.375 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "merge-gateway/minimax/minimax-m2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, + { + "id": "merge-gateway/mistral/codestral", + "name": "Codestral (latest)", + "family": "codestral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-10", + "release_date": "2024-05-29", + "last_updated": "2025-01-04", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 0.9 + }, + "limit": { + "context": 256000, + "output": 4096 + } + }, + { + "id": "merge-gateway/mistral/devstral", + "name": "Devstral 2", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-12", + "release_date": "2025-12-09", + "last_updated": "2025-12-09", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.4, + "output": 2.0 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + { + "id": "merge-gateway/mistral/devstral-medium", + "name": "Devstral Medium", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.4, + "output": 2.0 + }, + "limit": { + "context": 128000, + "output": 128000 + } + }, + { + "id": "merge-gateway/mistral/devstral-small", + "name": "Devstral Small", + "family": "devstral", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.1, + "output": 0.3 + }, + "limit": { + "context": 128000, + "output": 128000 + } + }, + { + "id": "merge-gateway/mistral/magistral-medium", + "name": "Magistral Medium (latest)", + "family": "magistral-medium", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-06", + "release_date": "2025-03-17", + "last_updated": "2025-03-20", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 2.0, + "output": 5.0 + }, + "limit": { + "context": 128000, + "output": 16384 + } + }, + { + "id": "merge-gateway/mistral/mistral-large", + "name": "Mistral Large (latest)", + "family": "mistral-large", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.5, + "output": 1.5 + }, + "limit": { + "context": 262144, + "output": 262144 + } + }, + { + "id": "merge-gateway/mistral/mistral-medium", + "name": "Mistral Medium 3", + "family": "mistral-medium", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.4, + "output": 2.0 + }, + "limit": { + "context": 131072, + "output": 131072 } }, { - "id": "llmgateway/qwen3.7-max", - "name": "Qwen3.7 Max", - "family": "qwen", - "attachment": false, + "id": "merge-gateway/mistral/mistral-small", + "name": "Mistral Small (latest)", + "family": "mistral-small", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-05-21", - "last_updated": "2026-05-21", + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": false, + "open_weights": true, "cost": { - "input": 2.5, - "output": 7.5, - "cache_read": 0.5, - "cache_write": 3.125 + "input": 0.15, + "output": 0.6 }, "limit": { - "context": 1000000, - "output": 65536 + "context": 256000, + "output": 256000 } }, { - "id": "llmgateway/qwen35-397b-a17b", - "name": "Qwen3.5 397B-A17B", - "family": "qwen", + "id": "merge-gateway/mistral/pixtral-large", + "name": "Pixtral Large (latest)", + "family": "pixtral", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2026-02-15", - "last_updated": "2026-02-15", + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2024-11-04", "modalities": { "input": [ "text", - "image", - "video", - "audio" + "image" ], "output": [ "text" @@ -62344,28 +65205,30 @@ }, "open_weights": true, "cost": { - "input": 0.6, - "output": 3.6 + "input": 2.0, + "output": 6.0 }, "limit": { - "context": 262144, - "output": 65536 + "context": 128000, + "output": 128000 } }, { - "id": "llmgateway/qwq-plus", - "name": "QwQ Plus", - "family": "qwen", - "attachment": false, - "reasoning": true, + "id": "merge-gateway/openai/gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2024-04", - "release_date": "2025-03-05", - "last_updated": "2025-03-05", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" @@ -62373,54 +65236,58 @@ }, "open_weights": false, "cost": { - "input": 0.8, - "output": 2.4 + "input": 2.0, + "output": 8.0, + "cache_read": 0.5 }, "limit": { - "context": 131072, - "output": 8192 + "context": 1047576, + "output": 32768 } }, { - "id": "llmgateway/seed-1.6-250615", - "name": "Seed 1.6 (250615)", - "family": "seed", + "id": "merge-gateway/openai/gpt-4.1-mini", + "name": "GPT-4.1 mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-06-25", - "last_updated": "2025-06-25", + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", "modalities": { "input": [ "text", - "image" + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.25, - "output": 2.0, - "cache_read": 0.05 + "input": 0.4, + "output": 1.6, + "cache_read": 0.1 }, "limit": { - "context": 256000, - "output": 8192 + "context": 1047576, + "output": 32768 } }, { - "id": "llmgateway/seed-1.6-250915", - "name": "Seed 1.6 (250915)", - "family": "seed", + "id": "merge-gateway/openai/gpt-4.1-nano", + "name": "GPT-4.1 nano", + "family": "gpt-nano", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-09-15", - "last_updated": "2025-09-15", + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", "modalities": { "input": [ "text", @@ -62430,27 +65297,28 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.25, - "output": 2.0, - "cache_read": 0.05 + "input": 0.1, + "output": 0.4, + "cache_read": 0.025 }, "limit": { - "context": 256000, - "output": 8192 + "context": 1047576, + "output": 32768 } }, { - "id": "llmgateway/seed-1.6-flash-250715", - "name": "Seed 1.6 Flash (250715)", - "family": "seed", + "id": "merge-gateway/openai/gpt-4o", + "name": "GPT-4o (2024-05-13)", + "family": "gpt", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-07-26", - "last_updated": "2025-07-26", + "knowledge": "2023-09", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", "modalities": { "input": [ "text", @@ -62460,61 +65328,63 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.07, - "output": 0.3, - "cache_read": 0.01 + "input": 5.0, + "output": 15.0 }, "limit": { - "context": 256000, - "output": 8192 + "context": 128000, + "output": 4096 } }, { - "id": "llmgateway/seed-1.8-251228", - "name": "Seed 1.8 (251228)", - "family": "seed", + "id": "merge-gateway/openai/gpt-4o-mini", + "name": "GPT-4o mini", + "family": "gpt-mini", "attachment": true, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", + "knowledge": "2023-09", + "release_date": "2024-07-18", + "last_updated": "2024-07-18", "modalities": { "input": [ "text", - "image" + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.25, - "output": 2.0, - "cache_read": 0.05 + "input": 0.15, + "output": 0.6, + "cache_read": 0.075 }, "limit": { - "context": 256000, - "output": 8192 + "context": 128000, + "output": 16384 } }, { - "id": "llmgateway/sonar", - "name": "Sonar", - "family": "sonar", - "attachment": false, - "reasoning": false, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", + "id": "merge-gateway/openai/gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" @@ -62522,25 +65392,26 @@ }, "open_weights": false, "cost": { - "input": 1.0, - "output": 1.0 + "input": 1.25, + "output": 10.0, + "cache_read": 0.125 }, "limit": { - "context": 128000, - "output": 4096 + "context": 400000, + "output": 128000 } }, { - "id": "llmgateway/sonar-pro", - "name": "Sonar Pro", - "family": "sonar-pro", + "id": "merge-gateway/openai/gpt-5-chat", + "name": "GPT-5 Chat (latest)", + "family": "gpt-codex", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": false, "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", "modalities": { "input": [ "text", @@ -62552,25 +65423,26 @@ }, "open_weights": false, "cost": { - "input": 3.0, - "output": 15.0 + "input": 1.25, + "output": 10.0, + "cache_read": 0.125 }, "limit": { - "context": 200000, - "output": 8192 + "context": 400000, + "output": 128000 } }, { - "id": "llmgateway/sonar-reasoning-pro", - "name": "Sonar Reasoning Pro", - "family": "sonar-reasoning", + "id": "merge-gateway/openai/gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-09-01", - "release_date": "2024-01-01", - "last_updated": "2025-09-01", + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", "modalities": { "input": [ "text", @@ -62582,114 +65454,123 @@ }, "open_weights": false, "cost": { - "input": 2.0, - "output": 8.0 + "input": 0.25, + "output": 2.0, + "cache_read": 0.025 }, "limit": { - "context": 128000, - "output": 4096 + "context": 400000, + "output": 128000 } }, { - "id": "lmstudio/openai/gpt-oss-20b", - "name": "GPT OSS 20B", - "family": "gpt-oss", - "attachment": false, + "id": "merge-gateway/openai/gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-08-05", - "last_updated": "2025-08-05", + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.0, - "output": 0.0 + "input": 0.05, + "output": 0.4, + "cache_read": 0.005 }, "limit": { - "context": 131072, - "output": 32768 + "context": 400000, + "output": 128000 } }, { - "id": "lmstudio/qwen/qwen3-30b-a3b", - "name": "Qwen3 30B A3B 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/openai/gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-30", - "last_updated": "2025-07-30", + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.0, - "output": 0.0 + "input": 1.25, + "output": 10.0, + "cache_read": 0.125 }, "limit": { - "context": 262144, - "output": 16384 + "context": 400000, + "output": 128000 } }, { - "id": "lmstudio/qwen/qwen3-coder-30b", - "name": "Qwen3 Coder 30B", - "family": "qwen", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/openai/gpt-5.1-chat", + "name": "GPT-5.1 Chat", + "family": "gpt-codex", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-07-23", - "last_updated": "2025-07-23", + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.0, - "output": 0.0 + "input": 1.25, + "output": 10.0, + "cache_read": 0.125 }, "limit": { - "context": 262144, - "output": 65536 + "context": 128000, + "output": 16384 } }, { - "id": "lucidquery/lucidnova-rf1-100b", - "name": "LucidNova RF1 100B", - "family": "nova", + "id": "merge-gateway/openai/gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-09-16", - "release_date": "2024-12-28", - "last_updated": "2025-09-10", + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" @@ -62697,28 +65578,30 @@ }, "open_weights": false, "cost": { - "input": 2.0, - "output": 5.0 + "input": 1.75, + "output": 14.0, + "cache_read": 0.175 }, "limit": { - "context": 120000, - "output": 8000 + "context": 400000, + "output": 128000 } }, { - "id": "lucidquery/lucidquery-nexus-coder", - "name": "LucidQuery Nexus Coder", - "family": "lucid", + "id": "merge-gateway/openai/gpt-5.2-chat", + "name": "GPT-5.2 Chat", + "family": "gpt-codex", "attachment": true, "reasoning": true, "tool_call": true, "temperature": false, - "knowledge": "2025-08-01", - "release_date": "2025-09-01", - "last_updated": "2025-09-01", + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" @@ -62726,80 +65609,89 @@ }, "open_weights": false, "cost": { - "input": 2.0, - "output": 5.0 + "input": 1.75, + "output": 14.0, + "cache_read": 0.175 }, "limit": { - "context": 250000, - "output": 60000 + "context": 128000, + "output": 16384 } }, { - "id": "meganova/MiniMaxAI/MiniMax-M2.1", - "name": "MiniMax M2.1", - "family": "minimax", - "attachment": false, - "reasoning": true, + "id": "merge-gateway/openai/gpt-5.3-chat", + "name": "GPT-5.3 Chat (latest)", + "family": "gpt", + "attachment": true, + "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-12-23", - "last_updated": "2025-12-23", + "knowledge": "2025-08-31", + "release_date": "2026-03-03", + "last_updated": "2026-03-03", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.28, - "output": 1.2 + "input": 1.75, + "output": 14.0, + "cache_read": 0.175 }, "limit": { - "context": 196608, - "output": 131072 + "context": 128000, + "output": 16384 } }, { - "id": "meganova/MiniMaxAI/MiniMax-M2.5", - "name": "MiniMax M2.5", - "family": "minimax", - "attachment": false, + "id": "merge-gateway/openai/gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.3, - "output": 1.2 + "input": 2.5, + "output": 15.0, + "cache_read": 0.25 }, "limit": { - "context": 204800, - "output": 131072 + "context": 1050000, + "output": 128000 } }, { - "id": "meganova/Qwen/Qwen2.5-VL-32B-Instruct", - "name": "Qwen2.5 VL 32B Instruct", - "family": "qwen", + "id": "merge-gateway/openai/gpt-5.4-mini", + "name": "GPT-5.4 mini", + "family": "gpt-mini", "attachment": true, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", "modalities": { "input": [ "text", @@ -62809,60 +65701,64 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.2, - "output": 0.6 + "input": 0.75, + "output": 4.5, + "cache_read": 0.075 }, "limit": { - "context": 16384, - "output": 16384 + "context": 400000, + "output": 128000 } }, { - "id": "meganova/Qwen/Qwen3-235B-A22B-Instruct", - "name": "Qwen3 235B A22B Instruct 2507", - "family": "qwen", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/openai/gpt-5.4-nano", + "name": "GPT-5.4 nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-07-23", - "last_updated": "2025-07-23", + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-17", + "last_updated": "2026-03-17", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.09, - "output": 0.6 + "input": 0.2, + "output": 1.25, + "cache_read": 0.02 }, "limit": { - "context": 262000, - "output": 262000 + "context": 400000, + "output": 128000 } }, { - "id": "meganova/Qwen/Qwen3.5-Plus", - "name": "Qwen3.5 Plus", - "family": "qwen", - "attachment": false, + "id": "merge-gateway/openai/gpt-5.5", + "name": "GPT-5.5", + "family": "gpt", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02", - "last_updated": "2026-02", + "temperature": false, + "knowledge": "2025-12-01", + "release_date": "2026-04-23", + "last_updated": "2026-04-23", "modalities": { "input": [ "text", "image", - "video" + "pdf" ], "output": [ "text" @@ -62870,82 +65766,90 @@ }, "open_weights": false, "cost": { - "input": 0.4, - "output": 2.4 + "input": 5.0, + "output": 30.0, + "cache_read": 0.5 }, "limit": { - "context": 1000000, - "output": 65536 + "context": 1050000, + "output": 128000 } }, { - "id": "meganova/XiaomiMiMo/MiMo-V2-Flash", - "name": "MiMo V2 Flash", - "family": "mimo", - "attachment": false, + "id": "merge-gateway/openai/o1", + "name": "o1", + "family": "o", + "attachment": true, "reasoning": true, "tool_call": true, - "temperature": true, - "knowledge": "2024-12-01", - "release_date": "2025-12-17", - "last_updated": "2025-12-17", + "temperature": false, + "knowledge": "2023-09", + "release_date": "2024-12-05", + "last_updated": "2024-12-05", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.1, - "output": 0.3 + "input": 15.0, + "output": 60.0, + "cache_read": 7.5 }, "limit": { - "context": 262144, - "output": 32000 + "context": 200000, + "output": 100000 } }, { - "id": "meganova/deepseek-ai/DeepSeek-R1", - "name": "DeepSeek R1 0528", - "family": "deepseek-thinking", - "attachment": false, + "id": "merge-gateway/openai/o3", + "name": "o3", + "family": "o", + "attachment": true, "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", + "tool_call": true, + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.5, - "output": 2.15 + "input": 2.0, + "output": 8.0, + "cache_read": 0.5 }, "limit": { - "context": 163840, - "output": 64000 + "context": 200000, + "output": 100000 } }, { - "id": "meganova/deepseek-ai/DeepSeek-V3", - "name": "DeepSeek V3 0324", - "family": "deepseek", + "id": "merge-gateway/openai/o3-mini", + "name": "o3-mini", + "family": "o-mini", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-03-24", - "last_updated": "2025-03-24", + "temperature": false, + "knowledge": "2024-05", + "release_date": "2024-12-20", + "last_updated": "2025-01-29", "modalities": { "input": [ "text" @@ -62954,110 +65858,121 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.25, - "output": 0.88 + "input": 1.1, + "output": 4.4, + "cache_read": 0.55 }, "limit": { - "context": 163840, - "output": 163840 + "context": 200000, + "output": 100000 } }, { - "id": "meganova/deepseek-ai/DeepSeek-V3.1", - "name": "DeepSeek V3.1", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/openai/o4-mini", + "name": "o4-mini", + "family": "o-mini", + "attachment": true, + "reasoning": true, "tool_call": true, - "temperature": true, - "release_date": "2025-08-25", - "last_updated": "2025-08-25", + "temperature": false, + "knowledge": "2024-05", + "release_date": "2025-04-16", + "last_updated": "2025-04-16", "modalities": { "input": [ - "text" + "text", + "image" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.27, - "output": 1.0 + "input": 1.1, + "output": 4.4, + "cache_read": 0.275 }, "limit": { - "context": 164000, - "output": 164000 + "context": 200000, + "output": 100000 } }, { - "id": "meganova/deepseek-ai/DeepSeek-V3.2", - "name": "DeepSeek V3.2", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/xai/grok-4.20", + "name": "Grok 4.20 (Reasoning)", + "family": "grok", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-12-03", - "last_updated": "2025-12-03", + "release_date": "2026-03-09", + "last_updated": "2026-03-09", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.26, - "output": 0.38 + "input": 1.25, + "output": 2.5, + "cache_read": 0.2 }, "limit": { - "context": 164000, - "output": 164000 + "context": 2000000, + "output": 30000 } }, { - "id": "meganova/deepseek-ai/DeepSeek-V3.2-Exp", - "name": "DeepSeek V3.2 Exp", - "family": "deepseek", - "attachment": false, - "reasoning": false, + "id": "merge-gateway/xai/grok-4.3", + "name": "Grok 4.3", + "family": "grok", + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-10-10", - "last_updated": "2025-10-10", + "release_date": "2026-04-17", + "last_updated": "2026-04-17", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.27, - "output": 0.4 + "input": 1.25, + "output": 2.5, + "cache_read": 0.2 }, "limit": { - "context": 164000, - "output": 164000 + "context": 1000000, + "output": 30000 } }, { - "id": "meganova/meta-llama/Llama-3.3-70B-Instruct", - "name": "Llama 3.3 70B Instruct", - "family": "llama", + "id": "merge-gateway/zai/glm-4.5", + "name": "GLM-4.5", + "family": "glm", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-12-06", - "last_updated": "2024-12-06", + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", "modalities": { "input": [ "text" @@ -63068,24 +65983,27 @@ }, "open_weights": true, "cost": { - "input": 0.1, - "output": 0.3 + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0.0 }, "limit": { "context": 131072, - "output": 16384 + "output": 98304 } }, { - "id": "meganova/mistralai/Mistral-Nemo-Instruct", - "name": "Mistral Nemo Instruct 2407", - "family": "mistral", + "id": "merge-gateway/zai/glm-4.5-air", + "name": "GLM-4.5-Air", + "family": "glm-air", "attachment": false, - "reasoning": false, + "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2024-07-18", - "last_updated": "2024-07-18", + "knowledge": "2025-04", + "release_date": "2025-07-28", + "last_updated": "2025-07-28", "modalities": { "input": [ "text" @@ -63096,29 +66014,30 @@ }, "open_weights": true, "cost": { - "input": 0.02, - "output": 0.04 + "input": 0.2, + "output": 1.1, + "cache_read": 0.03, + "cache_write": 0.0 }, "limit": { "context": 131072, - "output": 65536 + "output": 98304 } }, { - "id": "meganova/mistralai/Mistral-Small-3.2-24B-Instruct", - "name": "Mistral Small 3.2 24B Instruct", - "family": "mistral-small", - "attachment": true, - "reasoning": false, + "id": "merge-gateway/zai/glm-4.6", + "name": "GLM-4.6", + "family": "glm", + "attachment": false, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-10", - "release_date": "2025-06-20", - "last_updated": "2025-06-20", + "knowledge": "2025-04", + "release_date": "2025-09-30", + "last_updated": "2025-09-30", "modalities": { "input": [ - "text", - "image" + "text" ], "output": [ "text" @@ -63126,25 +66045,27 @@ }, "open_weights": true, "cost": { - "input": 0.0, - "output": 0.0 + "input": 0.6, + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0.0 }, "limit": { - "context": 32768, - "output": 8192 + "context": 204800, + "output": 131072 } }, { - "id": "meganova/moonshotai/Kimi-K2-Thinking", - "name": "Kimi K2 Thinking", - "family": "kimi-thinking", + "id": "merge-gateway/zai/glm-4.7", + "name": "GLM-4.7", + "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2024-08", - "release_date": "2025-11-06", - "last_updated": "2025-11-06", + "knowledge": "2025-04", + "release_date": "2025-12-22", + "last_updated": "2025-12-22", "modalities": { "input": [ "text" @@ -63156,28 +66077,29 @@ "open_weights": true, "cost": { "input": 0.6, - "output": 2.6 + "output": 2.2, + "cache_read": 0.11, + "cache_write": 0.0 }, "limit": { - "context": 262144, - "output": 262144 + "context": 204800, + "output": 131072 } }, { - "id": "meganova/moonshotai/Kimi-K2.5", - "name": "Kimi K2.5", - "family": "kimi", + "id": "merge-gateway/zai/glm-4.7-flashx", + "name": "GLM-4.7-FlashX", + "family": "glm-flash", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2026-01", - "release_date": "2026-01-27", - "last_updated": "2026-01-27", + "knowledge": "2025-04", + "release_date": "2026-01-19", + "last_updated": "2026-01-19", "modalities": { "input": [ - "text", - "image" + "text" ], "output": [ "text" @@ -63185,25 +66107,26 @@ }, "open_weights": true, "cost": { - "input": 0.45, - "output": 2.8 + "input": 0.07, + "output": 0.4, + "cache_read": 0.01, + "cache_write": 0.0 }, "limit": { - "context": 262144, - "output": 262144 + "context": 200000, + "output": 131072 } }, { - "id": "meganova/zai-org/GLM-4.6", - "name": "GLM-4.6", + "id": "merge-gateway/zai/glm-5", + "name": "GLM-5", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-09-30", - "last_updated": "2025-09-30", + "release_date": "2026-02-11", + "last_updated": "2026-02-11", "modalities": { "input": [ "text" @@ -63214,25 +66137,26 @@ }, "open_weights": true, "cost": { - "input": 0.45, - "output": 1.9 + "input": 1.0, + "output": 3.2, + "cache_read": 0.2, + "cache_write": 0.0 }, "limit": { - "context": 202752, + "context": 204800, "output": 131072 } }, { - "id": "meganova/zai-org/GLM-4.7", - "name": "GLM-4.7", + "id": "merge-gateway/zai/glm-5-turbo", + "name": "GLM-5-Turbo", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2025-12-22", - "last_updated": "2025-12-22", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", "modalities": { "input": [ "text" @@ -63241,26 +66165,28 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.2, - "output": 0.8 + "input": 1.2, + "output": 4.0, + "cache_read": 0.24, + "cache_write": 0.0 }, "limit": { - "context": 202752, + "context": 200000, "output": 131072 } }, { - "id": "meganova/zai-org/GLM-5", - "name": "GLM-5", + "id": "merge-gateway/zai/glm-5.1", + "name": "GLM-5.1", "family": "glm", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-11", - "last_updated": "2026-02-11", + "release_date": "2026-03-27", + "last_updated": "2026-03-27", "modalities": { "input": [ "text" @@ -63269,13 +66195,15 @@ "text" ] }, - "open_weights": true, + "open_weights": false, "cost": { - "input": 0.8, - "output": 2.56 + "input": 1.4, + "output": 4.4, + "cache_read": 0.26, + "cache_write": 0.0 }, "limit": { - "context": 202752, + "context": 200000, "output": 131072 } }, @@ -64248,15 +67176,15 @@ }, { "id": "mistralai/devstral-medium", - "name": "Devstral 2 (latest)", + "name": "Devstral Medium", "family": "devstral", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-12", - "release_date": "2025-12-02", - "last_updated": "2025-12-02", + "knowledge": "2025-05", + "release_date": "2025-07-10", + "last_updated": "2025-07-10", "modalities": { "input": [ "text" @@ -64271,21 +67199,21 @@ "output": 2.0 }, "limit": { - "context": 262144, - "output": 262144 + "context": 128000, + "output": 128000 } }, { "id": "mistralai/devstral-small", - "name": "Devstral Small", + "name": "Devstral Small 2505", "family": "devstral", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2025-05", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", + "release_date": "2025-05-07", + "last_updated": "2025-05-07", "modalities": { "input": [ "text" @@ -64568,15 +67496,15 @@ }, { "id": "mistralai/mistral-small", - "name": "Mistral Small 3.2", + "name": "Mistral Small (latest)", "family": "mistral-small", - "attachment": false, - "reasoning": false, + "attachment": true, + "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03", - "release_date": "2025-06-20", - "last_updated": "2025-06-20", + "knowledge": "2025-06", + "release_date": "2026-03-16", + "last_updated": "2026-03-16", "modalities": { "input": [ "text", @@ -64588,12 +67516,12 @@ }, "open_weights": true, "cost": { - "input": 0.1, - "output": 0.3 + "input": 0.15, + "output": 0.6 }, "limit": { - "context": 128000, - "output": 16384 + "context": 256000, + "output": 256000 } }, { @@ -75942,13 +78870,13 @@ }, { "id": "nano-gpt/moonshotai/kimi-k2-instruct", - "name": "Kimi K2 0711", + "name": "Kimi K2 Instruct", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, - "release_date": "2025-07-11", - "last_updated": "2025-07-11", + "release_date": "2025-07-01", + "last_updated": "2025-07-01", "modalities": { "input": [ "text" @@ -75963,7 +78891,7 @@ "output": 2.0 }, "limit": { - "context": 128000, + "context": 256000, "output": 8192 } }, @@ -76574,13 +79502,13 @@ }, { "id": "nano-gpt/openai/gpt-4o", - "name": "GPT-4o (2024-08-06)", + "name": "GPT-4o (2024-11-20)", "family": "gpt", "attachment": true, "reasoning": false, "tool_call": false, - "release_date": "2024-08-06", - "last_updated": "2024-08-06", + "release_date": "2024-11-20", + "last_updated": "2024-11-20", "modalities": { "input": [ "text", @@ -76592,8 +79520,8 @@ }, "open_weights": false, "cost": { - "input": 2.499, - "output": 9.996 + "input": 2.5, + "output": 10.0 }, "limit": { "context": 128000, @@ -76853,18 +79781,16 @@ }, { "id": "nano-gpt/openai/gpt-5.1", - "name": "GPT 5.1", + "name": "GPT-5.1 (2025-11-13)", "family": "gpt", - "attachment": true, - "reasoning": true, - "tool_call": true, + "attachment": false, + "reasoning": false, + "tool_call": false, "release_date": "2025-11-13", "last_updated": "2025-11-13", "modalities": { "input": [ - "text", - "image", - "pdf" + "text" ], "output": [ "text" @@ -76876,8 +79802,8 @@ "output": 10.0 }, "limit": { - "context": 400000, - "output": 128000 + "context": 1000000, + "output": 32768 } }, { @@ -80240,7 +83166,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -80364,7 +83290,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.13 + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -80642,7 +83568,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -82978,6 +85904,35 @@ "output": 32768 } }, + { + "id": "novita-ai/inclusionai/ring-2.6-1t", + "name": "Ring-2.6-1T", + "family": "ring", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-08", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 2.5, + "cache_read": 0.06 + }, + "limit": { + "context": 262144, + "output": 65536 + } + }, { "id": "novita-ai/kwaipilot/kat-coder-pro", "name": "Kat Coder Pro", @@ -83375,6 +86330,36 @@ "output": 131072 } }, + { + "id": "novita-ai/minimax/minimax-m2.7-highspeed", + "name": "MiniMax-M2.7-highspeed", + "family": "minimax", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-03-18", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.06, + "cache_write": 0.375 + }, + "limit": { + "context": 204800, + "output": 131072 + } + }, { "id": "novita-ai/minimaxai/minimax-m1-80k", "name": "MiniMax M1", @@ -84491,6 +87476,36 @@ "output": 64000 } }, + { + "id": "novita-ai/qwen/qwen3.7-max", + "name": "Qwen3.7-Max", + "family": "qwen", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-21", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 1.25, + "output": 3.75, + "cache_read": 0.125, + "cache_write": 1.5625 + }, + "limit": { + "context": 1000000, + "output": 65536 + } + }, { "id": "novita-ai/sao10K/L3-8B-stheno-v3.2", "name": "L3 8B Stheno V3.2", @@ -84630,6 +87645,66 @@ "output": 32000 } }, + { + "id": "novita-ai/xiaomimimo/mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.0, + "output": 6.0, + "cache_read": 0.4 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "novita-ai/xiaomimimo/mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 2.0, + "output": 6.0, + "cache_read": 0.4 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, { "id": "novita-ai/zai-org/autoglm-phone-9b-multilingual", "name": "AutoGLM-Phone-9B-Multilingual", @@ -86090,14 +89165,14 @@ }, { "id": "nvidia/moonshotai/kimi-k2-instruct", - "name": "Kimi K2 Instruct", + "name": "Kimi K2 0905", "family": "kimi", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2024-01", - "release_date": "2025-01-01", + "knowledge": "2024-10", + "release_date": "2025-09-05", "last_updated": "2025-09-05", "modalities": { "input": [ @@ -86107,14 +89182,14 @@ "text" ] }, - "open_weights": false, + "open_weights": true, "cost": { "input": 0.0, "output": 0.0 }, "limit": { - "context": 128000, - "output": 8192 + "context": 262144, + "output": 262144 } }, { @@ -87413,6 +90488,34 @@ "output": 16384 } }, + { + "id": "nvidia/stepfun-ai/step-3.7-flash", + "name": "Step 3.7 Flash", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 256000, + "output": 16384 + } + }, { "id": "nvidia/upstage/solar-10_7b-instruct", "name": "solar-10.7b-instruct", @@ -88134,6 +91237,34 @@ "output": 196608 } }, + { + "id": "ollama-cloud/minimax-m3", + "name": "minimax-m3", + "family": "minimax-m3", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-31", + "last_updated": "2026-05-31", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": {}, + "limit": { + "context": 512000, + "output": 131072 + } + }, { "id": "ollama-cloud/ministral-3:14b", "name": "ministral-3:14b", @@ -88503,7 +91634,7 @@ "cost": { "input": 0.5, "output": 1.5, - "cache_read": 1.25 + "cache_read": 0.0 }, "limit": { "context": 16385, @@ -88657,7 +91788,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -88666,15 +91797,15 @@ }, { "id": "openai/gpt-4o", - "name": "GPT-4o (2024-08-06)", + "name": "GPT-4o (2024-05-13)", "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-09", - "release_date": "2024-08-06", - "last_updated": "2024-08-06", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", "modalities": { "input": [ "text", @@ -88686,13 +91817,12 @@ }, "open_weights": false, "cost": { - "input": 2.5, - "output": 10.0, - "cache_read": 1.25 + "input": 5.0, + "output": 15.0 }, "limit": { "context": 128000, - "output": 16384 + "output": 4096 } }, { @@ -88720,7 +91850,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -88781,7 +91911,8 @@ "open_weights": false, "cost": { "input": 1.25, - "output": 10.0 + "output": 10.0, + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -88935,7 +92066,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.13 + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -89821,7 +92952,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -90217,9 +93348,9 @@ }, "open_weights": true, "cost": { - "input": 0.4, - "output": 2.0, - "cache_read": 0.08 + "input": 0.14, + "output": 0.28, + "cache_read": 0.0028 }, "limit": { "context": 1000000, @@ -90247,9 +93378,9 @@ }, "open_weights": true, "cost": { - "input": 1.0, - "output": 3.0, - "cache_read": 0.2 + "input": 1.74, + "output": 3.48, + "cache_read": 0.0145 }, "limit": { "context": 1048576, @@ -90316,6 +93447,38 @@ "output": 131072 } }, + { + "id": "opencode-go/minimax-m3", + "name": "MiniMax M3", + "family": "minimax-m3", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-31", + "last_updated": "2026-05-31", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.6, + "output": 2.4, + "cache_read": 0.12 + }, + "limit": { + "context": 512000, + "output": 131072 + } + }, { "id": "opencode-go/qwen3.5-plus", "name": "Qwen3.5 Plus", @@ -90382,6 +93545,36 @@ "output": 65536 } }, + { + "id": "opencode-go/qwen3.7-max", + "name": "Qwen3.7 Max", + "family": "qwen3.7-max", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-21", + "last_updated": "2026-05-21", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 2.5, + "output": 7.5, + "cache_read": 0.5, + "cache_write": 3.125 + }, + "limit": { + "context": 1000000, + "output": 65536 + } + }, { "id": "opencode/big-pickle", "name": "Big Pickle", @@ -90611,6 +93804,38 @@ "output": 128000 } }, + { + "id": "opencode/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "opencode/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -90710,6 +93935,36 @@ "output": 64000 } }, + { + "id": "opencode/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.03 + }, + "limit": { + "context": 1000000, + "output": 384000 + } + }, { "id": "opencode/deepseek-v4-flash-free", "name": "DeepSeek V4 Flash Free", @@ -91958,6 +95213,39 @@ "output": 64000 } }, + { + "id": "opencode/mimo-v2.5-free", + "name": "MiMo V2.5 Free", + "family": "mimo-v2.5-free", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, { "id": "opencode/minimax-m2.1", "name": "MiniMax M2.1", @@ -92108,6 +95396,38 @@ "output": 131072 } }, + { + "id": "opencode/minimax-m3-free", + "name": "MiniMax M3 Free", + "family": "minimax-m3-free", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-01", + "release_date": "2026-05-31", + "last_updated": "2026-05-31", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 200000, + "output": 32000 + } + }, { "id": "opencode/nemotron-3-super-free", "name": "Nemotron 3 Super Free", @@ -92464,6 +95784,7 @@ } }, { +<<<<<<< HEAD "id": "openrouter/alfredpros/codellama-7b-instruct-solidity", "name": "CodeLLaMa 7B Instruct Solidity", "family": "llama", @@ -92493,6 +95814,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "openrouter/allenai/olmo-3-32b-think", "name": "Olmo 3 32B Think", "family": "allenai", @@ -93024,6 +96347,70 @@ "output": 128000 } }, + { + "id": "openrouter/anthropic/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "openrouter/anthropic/claude-opus-4.8-fast", + "name": "Claude Opus 4.8 (Fast)", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-27", + "last_updated": "2026-05-27", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 10.0, + "output": 50.0, + "cache_read": 1.0, + "cache_write": 12.5 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "openrouter/anthropic/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -93237,34 +96624,6 @@ "output": 262144 } }, - { - "id": "openrouter/arcee-ai/trinity-large-thinking:free", - "name": "Trinity Large Thinking (free)", - "family": "trinity", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "release_date": "2026-04-01", - "last_updated": "2026-04-01", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0 - }, - "limit": { - "context": 262144, - "output": 80000 - } - }, { "id": "openrouter/arcee-ai/trinity-mini", "name": "Trinity Mini", @@ -93321,91 +96680,6 @@ "output": 64000 } }, - { - "id": "openrouter/baidu/cobuddy:free", - "name": "CoBuddy (free)", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": false, - "release_date": "2026-05-06", - "last_updated": "2026-05-06", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0 - }, - "limit": { - "context": 131072, - "output": 65536 - } - }, - { - "id": "openrouter/baidu/ernie-4.5-21b-a3b", - "name": "ERNIE 4.5 21B A3B", - "family": "ernie", - "attachment": false, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-08-12", - "last_updated": "2025-08-12", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.07, - "output": 0.28 - }, - "limit": { - "context": 120000, - "output": 8000 - } - }, - { - "id": "openrouter/baidu/ernie-4.5-21b-a3b-thinking", - "name": "ERNIE 4.5 21B A3B Thinking", - "family": "ernie", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-10-09", - "last_updated": "2025-10-09", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.07, - "output": 0.28 - }, - "limit": { - "context": 131072, - "output": 65536 - } - }, { "id": "openrouter/baidu/ernie-4.5-300b-a47b", "name": "ERNIE 4.5 300B A47B ", @@ -93495,34 +96769,6 @@ "output": 16000 } }, - { - "id": "openrouter/baidu/qianfan-ocr-fast", - "name": "Qianfan-OCR-Fast", - "attachment": true, - "reasoning": true, - "tool_call": false, - "temperature": true, - "release_date": "2026-04-20", - "last_updated": "2026-04-20", - "modalities": { - "input": [ - "image", - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.68, - "output": 2.81 - }, - "limit": { - "context": 65536, - "output": 28672 - } - }, { "id": "openrouter/bytedance-seed/seed-1.6", "name": "Seed 1.6", @@ -93867,8 +97113,13 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.2288, "output": 0.9144 +======= + "input": 0.2002, + "output": 0.8001 +>>>>>>> upstream/main }, "limit": { "context": 128000, @@ -93937,15 +97188,15 @@ }, { "id": "openrouter/deepseek/deepseek-r1", - "name": "R1 0528", - "family": "deepseek", + "name": "R1", + "family": "deepseek-thinking", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-05-28", - "last_updated": "2025-05-28", + "knowledge": "2024-07-31", + "release_date": "2025-01-20", + "last_updated": "2025-01-20", "modalities": { "input": [ "text" @@ -93956,13 +97207,12 @@ }, "open_weights": true, "cost": { - "input": 0.5, - "output": 2.15, - "cache_read": 0.35 + "input": 0.7, + "output": 2.5 }, "limit": { - "context": 163840, - "output": 32768 + "context": 64000, + "output": 16000 } }, { @@ -94074,13 +97324,12 @@ }, "open_weights": true, "cost": { - "input": 0.252, - "output": 0.378, - "cache_read": 0.0252 + "input": 0.2288, + "output": 0.3432 }, "limit": { - "context": 131072, - "output": 65536 + "context": 128000, + "output": 64000 } }, { @@ -94112,36 +97361,6 @@ "output": 65536 } }, - { - "id": "openrouter/deepseek/deepseek-v3.2-speciale", - "name": "DeepSeek V3.2 Speciale", - "family": "deepseek", - "attachment": false, - "reasoning": true, - "tool_call": false, - "temperature": true, - "knowledge": "2024-07", - "release_date": "2025-12-01", - "last_updated": "2025-12-01", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.287, - "output": 0.431, - "cache_read": 0.058 - }, - "limit": { - "context": 163840, - "output": 163840 - } - }, { "id": "openrouter/deepseek/deepseek-v4-flash", "name": "DeepSeek V4 Flash", @@ -94163,6 +97382,7 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.1, "output": 0.2, "cache_read": 0.02 @@ -94195,10 +97415,15 @@ "cost": { "input": 0.0, "output": 0.0 +======= + "input": 0.0983, + "output": 0.1966, + "cache_read": 0.0197 +>>>>>>> upstream/main }, "limit": { "context": 1048576, - "output": 384000 + "output": 131072 } }, { @@ -94260,6 +97485,7 @@ } }, { +<<<<<<< HEAD "id": "openrouter/google/gemini-2.0-flash-001", "name": "Gemini 2.0 Flash", "family": "gemini-flash", @@ -94328,6 +97554,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "openrouter/google/gemini-2.5-flash", "name": "Gemini 2.5 Flash", "family": "gemini-flash", @@ -95362,9 +98590,9 @@ }, "open_weights": false, "cost": { - "input": 0.075, - "output": 0.625, - "cache_read": 0.015 + "input": 0.3, + "output": 2.5, + "cache_read": 0.06 }, "limit": { "context": 262144, @@ -95868,7 +99096,7 @@ "family": "llama", "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, "knowledge": "2024-08-31", "release_date": "2025-04-05", @@ -96242,15 +99470,15 @@ } }, { - "id": "openrouter/minimax/minimax-m2.5:free", - "name": "MiniMax M2.5 (free)", + "id": "openrouter/minimax/minimax-m2.7", + "name": "MiniMax-M2.7", "family": "minimax", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-02-12", - "last_updated": "2026-02-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", "modalities": { "input": [ "text" @@ -96261,27 +99489,29 @@ }, "open_weights": true, "cost": { - "input": 0.0, - "output": 0.0 + "input": 0.26, + "output": 1.2 }, "limit": { "context": 196608, - "output": 8192 + "output": 131072 } }, { - "id": "openrouter/minimax/minimax-m2.7", - "name": "MiniMax-M2.7", - "family": "minimax", - "attachment": false, + "id": "openrouter/minimax/minimax-m3", + "name": "MiniMax M3", + "family": "minimax-m3", + "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", + "release_date": "2026-05-31", + "last_updated": "2026-05-31", "modalities": { "input": [ - "text" + "text", + "image", + "video" ], "output": [ "text" @@ -96289,12 +99519,13 @@ }, "open_weights": true, "cost": { - "input": 0.279, - "output": 1.2 + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 }, "limit": { - "context": 196608, - "output": 131072 + "context": 524288, + "output": 512000 } }, { @@ -96359,68 +99590,6 @@ "output": 262144 } }, - { - "id": "openrouter/mistralai/devstral-medium", - "name": "Devstral Medium", - "family": "devstral", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-06-30", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { - "input": [ - "text", - "pdf" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.4, - "output": 2.0, - "cache_read": 0.04 - }, - "limit": { - "context": 131072, - "output": 131072 - } - }, - { - "id": "openrouter/mistralai/devstral-small", - "name": "Devstral Small 1.1", - "family": "devstral", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-07-10", - "last_updated": "2025-07-10", - "modalities": { - "input": [ - "text", - "pdf" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.1, - "output": 0.3, - "cache_read": 0.01 - }, - "limit": { - "context": 131072, - "output": 131072 - } - }, { "id": "openrouter/mistralai/ministral-14b", "name": "Ministral 3 14B 2512", @@ -96512,19 +99681,21 @@ } }, { - "id": "openrouter/mistralai/mistral-7b-instruct-v0.1", - "name": "Mistral 7B Instruct v0.1", - "family": "mistral", - "attachment": false, + "id": "openrouter/mistralai/mistral-large", + "name": "Mistral Large 3", + "family": "mistral-large", + "attachment": true, "reasoning": false, - "tool_call": false, + "tool_call": true, "temperature": true, - "knowledge": "2023-09-30", - "release_date": "2023-09-28", - "last_updated": "2023-09-28", + "knowledge": "2024-11", + "release_date": "2024-11-01", + "last_updated": "2025-12-02", "modalities": { "input": [ - "text" + "text", + "image", + "pdf" ], "output": [ "text" @@ -96532,10 +99703,12 @@ }, "open_weights": true, "cost": { - "input": 0.11, - "output": 0.19 + "input": 0.5, + "output": 1.5, + "cache_read": 0.05 }, "limit": { +<<<<<<< HEAD "context": 2824, "output": 2824 } @@ -96569,6 +99742,10 @@ "limit": { "context": 131072, "output": 131072 +======= + "context": 262144, + "output": 262144 +>>>>>>> upstream/main } }, { @@ -96876,38 +100053,6 @@ "output": 65536 } }, - { - "id": "openrouter/mistralai/pixtral-large", - "name": "Pixtral Large 2411", - "family": "mistral", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2024-07-31", - "release_date": "2024-11-19", - "last_updated": "2024-11-19", - "modalities": { - "input": [ - "text", - "image", - "pdf" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 2.0, - "output": 6.0, - "cache_read": 0.2 - }, - "limit": { - "context": 131072, - "output": 131072 - } - }, { "id": "openrouter/mistralai/voxtral-small-24b", "name": "Voxtral Small 24B 2507", @@ -97050,13 +100195,43 @@ }, "open_weights": true, "cost": { - "input": 0.73, - "output": 3.49, - "cache_read": 0.25 + "input": 0.684, + "output": 3.42, + "cache_read": 0.144 }, "limit": { - "context": 262142, - "output": 262142 + "context": 262144, + "output": 262144 + } + }, + { + "id": "openrouter/moonshotai/kimi-k2.6:free", + "name": "Kimi K2.6 (free)", + "family": "kimi-k2.6", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-01", + "release_date": "2026-04-21", + "last_updated": "2026-04-21", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 262144, + "output": 262144 } }, { @@ -97883,15 +101058,20 @@ }, { "id": "openrouter/openai/gpt-4o", - "name": "GPT-4o (2024-08-06)", + "name": "GPT-4o (2024-05-13)", "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-09", +<<<<<<< HEAD "release_date": "2024-08-06", "last_updated": "2024-08-06", +======= + "release_date": "2024-05-13", + "last_updated": "2024-05-13", +>>>>>>> upstream/main "modalities": { "input": [ "text", @@ -97904,44 +101084,12 @@ }, "open_weights": false, "cost": { - "input": 2.5, - "output": 10.0, - "cache_read": 1.25 - }, - "limit": { - "context": 128000, - "output": 16384 - } - }, - { - "id": "openrouter/openai/gpt-4o-audio-preview", - "name": "GPT-4o Audio", - "family": "gpt", - "attachment": true, - "reasoning": false, - "tool_call": true, - "temperature": true, - "knowledge": "2023-10-31", - "release_date": "2025-08-15", - "last_updated": "2025-08-15", - "modalities": { - "input": [ - "audio", - "text" - ], - "output": [ - "text", - "audio" - ] - }, - "open_weights": false, - "cost": { - "input": 2.5, - "output": 10.0 + "input": 5.0, + "output": 15.0 }, "limit": { "context": 128000, - "output": 16384 + "output": 4096 } }, { @@ -98346,11 +101494,11 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.125 + "cache_read": 0.13 }, "limit": { "context": 128000, - "output": 16384 + "output": 32000 } }, { @@ -98377,7 +101525,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.125 + "cache_read": 0.13 }, "limit": { "context": 400000, @@ -98439,11 +101587,11 @@ "cost": { "input": 0.25, "output": 2.0, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 400000, - "output": 128000 + "output": 100000 } }, { @@ -98507,7 +101655,7 @@ }, "limit": { "context": 128000, - "output": 32000 + "output": 16384 } }, { @@ -99027,7 +102175,7 @@ }, "open_weights": true, "cost": { - "input": 0.03, + "input": 0.029, "output": 0.14 }, "limit": { @@ -99739,8 +102887,8 @@ "output": 0.0 }, "limit": { - "context": 131072, - "output": 8192 + "context": 262144, + "output": 32768 } }, { @@ -99766,8 +102914,8 @@ "output": 0.0 }, "limit": { - "context": 131072, - "output": 8192 + "context": 262144, + "output": 32768 } }, { @@ -99834,7 +102982,7 @@ "family": "qwen", "attachment": false, "reasoning": false, - "tool_call": true, + "tool_call": false, "temperature": true, "knowledge": "2024-06-30", "release_date": "2024-10-16", @@ -100008,15 +103156,15 @@ }, { "id": "openrouter/qwen/qwen3-235b-a22b", - "name": "Qwen3 235B A22B", + "name": "Qwen3 235B A22B Instruct 2507", "family": "qwen", "attachment": false, - "reasoning": true, + "reasoning": false, "tool_call": true, "temperature": true, - "knowledge": "2025-03-31", - "release_date": "2025-04-28", - "last_updated": "2025-04-28", + "knowledge": "2025-06-30", + "release_date": "2025-07-21", + "last_updated": "2025-07-21", "modalities": { "input": [ "text" @@ -100027,12 +103175,12 @@ }, "open_weights": true, "cost": { - "input": 0.455, - "output": 1.82 + "input": 0.071, + "output": 0.1 }, "limit": { - "context": 131072, - "output": 8192 + "context": 262144, + "output": 16384 } }, { @@ -100056,12 +103204,13 @@ }, "open_weights": true, "cost": { - "input": 0.1495, - "output": 1.495 + "input": 0.1, + "output": 0.1, + "cache_read": 0.1 }, "limit": { - "context": 131072, - "output": 81920 + "context": 262144, + "output": 262144 } }, { @@ -100830,7 +103979,7 @@ }, "limit": { "context": 262144, - "output": 81920 + "output": 262144 } }, { @@ -100917,8 +104066,7 @@ "open_weights": false, "cost": { "input": 0.065, - "output": 0.26, - "cache_write": 0.08125 + "output": 0.26 }, "limit": { "context": 1000000, @@ -100948,7 +104096,8 @@ "open_weights": false, "cost": { "input": 0.3, - "output": 1.8 + "output": 1.8, + "cache_write": 0.375 }, "limit": { "context": 1000000, @@ -100979,8 +104128,7 @@ "open_weights": false, "cost": { "input": 0.26, - "output": 1.56, - "cache_write": 0.325 + "output": 1.56 }, "limit": { "context": 1000000, @@ -101009,12 +104157,21 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.3, "output": 3.2 }, "limit": { "context": 262144, "output": 262144 +======= + "input": 0.29, + "output": 3.2 + }, + "limit": { + "context": 262140, + "output": 262140 +>>>>>>> upstream/main } }, { @@ -101039,7 +104196,11 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.15, +======= + "input": 0.14, +>>>>>>> upstream/main "output": 1.0 }, "limit": { @@ -101159,9 +104320,16 @@ }, "open_weights": false, "cost": { +<<<<<<< HEAD "input": 2.5, "output": 7.5, "cache_write": 3.125 +======= + "input": 1.25, + "output": 3.75, + "cache_read": 0.25, + "cache_write": 1.5625 +>>>>>>> upstream/main }, "limit": { "context": 1000000, @@ -101454,6 +104622,40 @@ "limit": { "context": 262144, "output": 16384 +<<<<<<< HEAD +======= + } + }, + { + "id": "openrouter/stepfun/step-3.7-flash", + "name": "Step 3.7 Flash", + "family": "step", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.2, + "output": 1.15, + "cache_read": 0.04 + }, + "limit": { + "context": 256000, + "output": 256000 +>>>>>>> upstream/main } }, { @@ -101895,6 +105097,7 @@ } }, { +<<<<<<< HEAD "id": "openrouter/xiaomi/mimo-v2-omni", "name": "MiMo-V2-Omni", "family": "mimo", @@ -101958,6 +105161,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "openrouter/xiaomi/mimo-v2.5", "name": "MiMo-V2.5", "family": "mimo", @@ -101981,9 +105186,9 @@ }, "open_weights": true, "cost": { - "input": 0.4, - "output": 2.0, - "cache_read": 0.08 + "input": 0.14, + "output": 0.28, + "cache_read": 0.0028 }, "limit": { "context": 1048576, @@ -102011,13 +105216,13 @@ }, "open_weights": true, "cost": { - "input": 1.0, - "output": 3.0, - "cache_read": 0.2 + "input": 0.435, + "output": 0.87, + "cache_read": 0.0036 }, "limit": { "context": 1048576, - "output": 16384 + "output": 131072 } }, { @@ -102100,13 +105305,13 @@ }, "open_weights": true, "cost": { - "input": 0.13, + "input": 0.125, "output": 0.85, - "cache_read": 0.025 + "cache_read": 0.06 }, "limit": { - "context": 131072, - "output": 98304 + "context": 131070, + "output": 131070 } }, { @@ -102312,12 +105517,12 @@ "open_weights": true, "cost": { "input": 0.6, - "output": 1.92, + "output": 2.08, "cache_read": 0.12 }, "limit": { "context": 202752, - "output": 131000 + "output": 16384 } }, { @@ -102595,13 +105800,13 @@ }, "open_weights": false, "cost": { - "input": 0.73, - "output": 3.49, - "cache_read": 0.25 + "input": 0.684, + "output": 3.42, + "cache_read": 0.144 }, "limit": { - "context": 262142, - "output": 262142 + "context": 262144, + "output": 262144 } }, { @@ -103721,7 +106926,7 @@ "cost": { "input": 0.5, "output": 1.5, - "cache_read": 1.25 + "cache_read": 0.0 }, "limit": { "context": 16385, @@ -103875,7 +107080,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -103884,15 +107089,15 @@ }, { "id": "orcarouter/openai/gpt-4o", - "name": "GPT-4o (2024-08-06)", + "name": "GPT-4o (2024-05-13)", "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, "temperature": true, "knowledge": "2023-09", - "release_date": "2024-08-06", - "last_updated": "2024-08-06", + "release_date": "2024-05-13", + "last_updated": "2024-05-13", "modalities": { "input": [ "text", @@ -103904,13 +107109,12 @@ }, "open_weights": false, "cost": { - "input": 2.5, - "output": 10.0, - "cache_read": 1.25 + "input": 5.0, + "output": 15.0 }, "limit": { "context": 128000, - "output": 16384 + "output": 4096 } }, { @@ -103938,7 +107142,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -103999,7 +107203,8 @@ "open_weights": false, "cost": { "input": 1.25, - "output": 10.0 + "output": 10.0, + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -104153,7 +107358,7 @@ "cost": { "input": 1.25, "output": 10.0, - "cache_read": 0.13 + "cache_read": 0.125 }, "limit": { "context": 400000, @@ -106362,6 +109567,36 @@ "output": 128000 } }, + { + "id": "poe/anthropic/claude-opus-4.8", + "name": "Claude-Opus-4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 4.2929, + "output": 21.4646 + }, + "limit": { + "context": 1048576, + "output": 128000 + } + }, { "id": "poe/anthropic/claude-sonnet-3.5", "name": "Claude-Sonnet-3.5", @@ -108100,14 +111335,14 @@ }, { "id": "poe/openai/gpt-4-classic", - "name": "GPT-4-Classic", + "name": "GPT-4-Classic-0314", "family": "gpt", "attachment": true, "reasoning": false, "tool_call": true, "temperature": false, - "release_date": "2024-03-25", - "last_updated": "2024-03-25", + "release_date": "2024-08-26", + "last_updated": "2024-08-26", "modalities": { "input": [ "text", @@ -110659,7 +113894,7 @@ }, { "id": "qiniu-ai/deepseek-r1", - "name": "DeepSeek-R1-0528", + "name": "DeepSeek-R1", "attachment": false, "reasoning": true, "tool_call": true, @@ -112334,13 +115569,13 @@ }, { "id": "qiniu-ai/x-ai/grok-4-fast", - "name": "X-Ai/Grok-4-Fast-Reasoning", + "name": "x-AI/Grok-4-Fast", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "release_date": "2025-12-18", - "last_updated": "2025-12-18", + "release_date": "2025-09-20", + "last_updated": "2025-09-20", "modalities": { "input": [ "text", @@ -114379,7 +117614,7 @@ }, "limit": { "context": 202752, - "output": 202752 + "output": 65536 } }, { @@ -114409,7 +117644,7 @@ }, "limit": { "context": 202752, - "output": 202752 + "output": 65536 } }, { @@ -114508,6 +117743,38 @@ "output": 262144 } }, + { + "id": "routing-run/route/mimo-v2.5", + "name": "MiMo V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.45, + "output": 1.35, + "cache_read": 0.2 + }, + "limit": { + "context": 1000000, + "output": 262144 + } + }, { "id": "routing-run/route/mimo-v2.5-pro", "name": "MiMo V2.5 Pro", @@ -114787,7 +118054,7 @@ "id": "routing-run/route/qwen3.6-27b", "name": "Qwen3.6 27B", "family": "qwen", - "attachment": true, + "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, @@ -114795,9 +118062,7 @@ "last_updated": "2026-04-22", "modalities": { "input": [ - "text", - "image", - "video" + "text" ], "output": [ "text" @@ -114809,20 +118074,48 @@ "output": 3.3 }, "limit": { - "context": 262144, - "output": 262144 + "context": 202000, + "output": 32768 + } + }, + { + "id": "routing-run/route/qwen3.6-27b-202k", + "name": "Qwen3.6 27B 202K", + "family": "qwen", + "attachment": false, + "reasoning": false, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 1.1, + "output": 3.3 + }, + "limit": { + "context": 202000, + "output": 32768 } }, { "id": "routing-run/route/step-3.5-flash", - "name": "Step 3.5 Flash", + "name": "Step 3.5 Flash 2603", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2026-01-29", - "last_updated": "2026-02-13", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", "modalities": { "input": [ "text" @@ -114833,9 +118126,9 @@ }, "open_weights": true, "cost": { - "input": 0.096, - "output": 0.288, - "cache_read": 0.019 + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 }, "limit": { "context": 262144, @@ -118140,6 +121433,35 @@ "output": 164000 } }, + { + "id": "siliconflow-cn/deepseek-ai/DeepSeek-V4-Pro", + "name": "deepseek-ai/DeepSeek-V4-Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-04-24", + "last_updated": "2026-04-24", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.145 + }, + "limit": { + "context": 1049000, + "output": 393000 + } + }, { "id": "siliconflow-cn/deepseek-ai/deepseek-vl2", "name": "deepseek-ai/deepseek-vl2", @@ -120097,13 +123419,13 @@ }, { "id": "siliconflow/moonshotai/Kimi-K2-Instruct", - "name": "moonshotai/Kimi-K2-Instruct-0905", + "name": "moonshotai/Kimi-K2-Instruct", "family": "kimi", "attachment": false, "reasoning": false, "tool_call": true, "temperature": true, - "release_date": "2025-09-08", + "release_date": "2025-07-13", "last_updated": "2025-11-25", "modalities": { "input": [ @@ -120115,12 +123437,12 @@ }, "open_weights": false, "cost": { - "input": 0.4, - "output": 2.0 + "input": 0.58, + "output": 2.29 }, "limit": { - "context": 262000, - "output": 262000 + "context": 131000, + "output": 131000 } }, { @@ -120635,6 +123957,309 @@ "output": 131072 } }, + { + "id": "snowflake-cortex/claude-haiku-4.5", + "name": "Claude Haiku 4.5 (latest)", + "family": "claude-haiku", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-02-28", + "release_date": "2025-10-15", + "last_updated": "2025-10-15", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 200000, + "output": 16384 + } + }, + { + "id": "snowflake-cortex/claude-opus-4.7", + "name": "Claude Opus 4.7", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2026-01-31", + "release_date": "2026-04-16", + "last_updated": "2026-04-16", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "snowflake-cortex/claude-sonnet-4.5", + "name": "Claude Sonnet 4.5 (latest)", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-07-31", + "release_date": "2025-09-29", + "last_updated": "2025-09-29", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 200000, + "output": 16384 + } + }, + { + "id": "snowflake-cortex/claude-sonnet-4.6", + "name": "Claude Sonnet 4.6", + "family": "claude-sonnet", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-08-31", + "release_date": "2026-02-17", + "last_updated": "2026-03-13", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 1000000, + "output": 16384 + } + }, + { + "id": "snowflake-cortex/openai-gpt-4.1", + "name": "GPT-4.1", + "family": "gpt", + "attachment": true, + "reasoning": false, + "tool_call": true, + "temperature": true, + "knowledge": "2024-04", + "release_date": "2025-04-14", + "last_updated": "2025-04-14", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 1047576, + "output": 32768 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5", + "name": "GPT-5", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 400000, + "output": 128000 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5-mini", + "name": "GPT-5 Mini", + "family": "gpt-mini", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 272000, + "output": 8192 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5-nano", + "name": "GPT-5 Nano", + "family": "gpt-nano", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-05-30", + "release_date": "2025-08-07", + "last_updated": "2025-08-07", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 400000, + "output": 128000 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5.1", + "name": "GPT-5.1", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2024-09-30", + "release_date": "2025-11-13", + "last_updated": "2025-11-13", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 400000, + "output": 128000 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5.2", + "name": "GPT-5.2", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2025-12-11", + "last_updated": "2025-12-11", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 400000, + "output": 128000 + } + }, + { + "id": "snowflake-cortex/openai-gpt-5.4", + "name": "GPT-5.4", + "family": "gpt", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": false, + "knowledge": "2025-08-31", + "release_date": "2026-03-05", + "last_updated": "2026-03-05", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": {}, + "limit": { + "context": 1050000, + "output": 128000 + } + }, { "id": "stackit/Qwen/Qwen3-VL-235B-A22B-Instruct-FP8", "name": "Qwen3-VL 235B", @@ -120864,14 +124489,23 @@ }, { "id": "stepfun-ai/step-3.5-flash", +<<<<<<< HEAD "name": "Step 3.5 Flash 2603", +======= + "name": "Step 3.5 Flash", +>>>>>>> upstream/main "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-01", +<<<<<<< HEAD "release_date": "2026-04-02", "last_updated": "2026-04-02", +======= + "release_date": "2026-01-29", + "last_updated": "2026-02-13", +>>>>>>> upstream/main "modalities": { "input": [ "text" @@ -120882,9 +124516,15 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.1, "output": 0.3, "cache_read": 0.02 +======= + "input": 0.096, + "output": 0.288, + "cache_read": 0.019 +>>>>>>> upstream/main }, "limit": { "context": 256000, @@ -120951,14 +124591,14 @@ }, { "id": "stepfun/step-3.5-flash", - "name": "Step 3.5 Flash", + "name": "Step 3.5 Flash 2603", "attachment": false, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-01", - "release_date": "2026-01-29", - "last_updated": "2026-02-13", + "release_date": "2026-04-02", + "last_updated": "2026-04-02", "modalities": { "input": [ "text" @@ -120969,9 +124609,9 @@ }, "open_weights": true, "cost": { - "input": 0.096, - "output": 0.288, - "cache_read": 0.019 + "input": 0.1, + "output": 0.3, + "cache_read": 0.02 }, "limit": { "context": 256000, @@ -123723,6 +127363,68 @@ "output": 128000 } }, + { + "id": "venice/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 6.0, + "output": 30.0, + "cache_read": 0.6, + "cache_write": 7.5 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, + { + "id": "venice/claude-opus-4.8-fast", + "name": "Claude Opus 4.8 Fast", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 12.0, + "output": 60.0, + "cache_read": 1.2, + "cache_write": 15.0 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "venice/claude-sonnet-4.5", "name": "Claude Sonnet 4.5", @@ -124448,6 +128150,36 @@ "output": 32768 } }, + { + "id": "venice/minimax-m3", + "name": "MiniMax M3", + "family": "minimax-m3", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-06-01", + "last_updated": "2026-06-01", + "modalities": { + "input": [ + "text", + "image" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.3, + "output": 1.2, + "cache_read": 0.06 + }, + "limit": { + "context": 500000, + "output": 32768 + } + }, { "id": "venice/mistral-small", "name": "Mistral Small 4", @@ -126662,15 +130394,15 @@ }, { "id": "vercel/anthropic/claude-opus-4.1", - "name": "Claude Opus 4", + "name": "Claude Opus 4.1", "family": "claude-opus", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-03-31", - "release_date": "2025-05-22", - "last_updated": "2025-05-22", + "release_date": "2025-08-05", + "last_updated": "2025-08-05", "modalities": { "input": [ "text", @@ -126791,6 +130523,38 @@ "output": 128000 } }, + { + "id": "vercel/anthropic/claude-opus-4.8", + "name": "Claude Opus 4.8", + "family": "claude-opus", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-28", + "last_updated": "2026-05-28", + "modalities": { + "input": [ + "text", + "image", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 25.0, + "cache_read": 0.5, + "cache_write": 6.25 + }, + "limit": { + "context": 1000000, + "output": 128000 + } + }, { "id": "vercel/anthropic/claude-sonnet-4", "name": "Claude Sonnet 4", @@ -128470,14 +132234,15 @@ }, { "id": "vercel/meituan/longcat-flash-thinking", - "name": "LongCat Flash Thinking 2601", + "name": "LongCat Flash Thinking", "family": "longcat", "attachment": false, "reasoning": true, - "tool_call": false, + "tool_call": true, "temperature": true, - "release_date": "2026-03-13", - "last_updated": "2026-03-13", + "knowledge": "2024-10", + "release_date": "2025-09-23", + "last_updated": "2025-09-23", "modalities": { "input": [ "text" @@ -128487,10 +132252,13 @@ ] }, "open_weights": false, - "cost": {}, + "cost": { + "input": 0.15, + "output": 1.5 + }, "limit": { - "context": 32768, - "output": 32768 + "context": 128000, + "output": 8192 } }, { @@ -130083,7 +133851,7 @@ "cost": { "input": 0.1, "output": 0.4, - "cache_read": 0.03 + "cache_read": 0.025 }, "limit": { "context": 1047576, @@ -130147,7 +133915,7 @@ "cost": { "input": 0.15, "output": 0.6, - "cache_read": 0.08 + "cache_read": 0.075 }, "limit": { "context": 128000, @@ -131176,7 +134944,7 @@ "cost": { "input": 1.1, "output": 4.4, - "cache_read": 0.28 + "cache_read": 0.275 }, "limit": { "context": 200000, @@ -131269,19 +135037,18 @@ }, { "id": "vercel/perplexity/sonar", - "name": "Sonar", - "family": "sonar", - "attachment": true, - "reasoning": false, - "tool_call": true, + "name": "Sonar Reasoning", + "family": "sonar-reasoning", + "attachment": false, + "reasoning": true, + "tool_call": false, "temperature": true, - "knowledge": "2025-02", + "knowledge": "2025-09", "release_date": "2025-02-19", "last_updated": "2025-02-19", "modalities": { "input": [ - "text", - "image" + "text" ], "output": [ "text" @@ -131290,7 +135057,7 @@ "open_weights": false, "cost": { "input": 1.0, - "output": 1.0 + "output": 5.0 }, "limit": { "context": 127000, @@ -133275,7 +137042,7 @@ "temperature": true, "knowledge": "2025-04", "release_date": "2026-04-07", - "last_updated": "2026-04-07", + "last_updated": "2026-06-01", "modalities": { "input": [ "text" @@ -133286,9 +137053,9 @@ }, "open_weights": true, "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0, + "input": 1.0, + "output": 3.2, + "cache_read": 0.1, "cache_write": 0.0 }, "limit": { @@ -133298,6 +137065,7 @@ }, { "id": "wafer.ai/Kimi-K2.6", +<<<<<<< HEAD "name": "Kimi K2.6", "family": "kimi", "attachment": true, @@ -133332,13 +137100,17 @@ "id": "wafer.ai/Qwen3.5-397B-A17B", "name": "Qwen3.5 397B A17B", "family": "qwen", +======= + "name": "Kimi-K2.6", + "family": "kimi", +>>>>>>> upstream/main "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, - "knowledge": "2025-04", - "release_date": "2026-02-16", - "last_updated": "2026-02-16", + "knowledge": "2025-01", + "release_date": "2026-05-13", + "last_updated": "2026-06-01", "modalities": { "input": [ "text", @@ -133351,9 +137123,9 @@ }, "open_weights": true, "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0, + "input": 0.68, + "output": 3.15, + "cache_read": 0.07, "cache_write": 0.0 }, "limit": { @@ -133362,16 +137134,26 @@ } }, { +<<<<<<< HEAD "id": "wafer.ai/Qwen3.6-35B-A3B", "name": "Qwen3.6 35B A3B", +======= + "id": "wafer.ai/Qwen3.5-397B-A17B", + "name": "Qwen3.5-397B-A17B", +>>>>>>> upstream/main "family": "qwen", "attachment": true, "reasoning": true, "tool_call": true, "temperature": true, "knowledge": "2025-04", +<<<<<<< HEAD "release_date": "2026-05-11", "last_updated": "2026-05-11", +======= + "release_date": "2026-02-16", + "last_updated": "2026-06-01", +>>>>>>> upstream/main "modalities": { "input": [ "text", @@ -133384,14 +137166,149 @@ }, "open_weights": true, "cost": { +<<<<<<< HEAD "input": 0.19, "output": 1.25, +======= + "input": 0.43, + "output": 2.6, + "cache_read": 0.04, + "cache_write": 0.0 + }, + "limit": { + "context": 262144, + "output": 65536 + } + }, + { + "id": "wafer.ai/Qwen3.6-35B-A3B", + "name": "Qwen3.6-35B-A3B", + "family": "qwen", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2026-05-11", + "last_updated": "2026-05-30", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.15, + "output": 1.0, +>>>>>>> upstream/main "cache_read": 0.02, "cache_write": 0.0 }, "limit": { +<<<<<<< HEAD "context": 32768, "output": 16384 +======= + "context": 256000, + "output": 65536 + } + }, + { + "id": "wafer.ai/deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "family": "deepseek-flash", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-05-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.14, + "output": 0.28, + "cache_read": 0.01, + "cache_write": 0.0 + }, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + { + "id": "wafer.ai/deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "family": "deepseek-thinking", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-05", + "release_date": "2026-04-24", + "last_updated": "2026-05-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 1.74, + "output": 3.48, + "cache_read": 0.02, + "cache_write": 0.0 + }, + "limit": { + "context": 1000000, + "output": 384000 + } + }, + { + "id": "wafer.ai/qwen3.7-max", + "name": "Qwen3.7-Max", + "family": "qwen3.7-max", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "release_date": "2026-05-21", + "last_updated": "2026-05-30", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 5.0, + "output": 15.0, + "cache_read": 0.5, + "cache_write": 0.0 + }, + "limit": { + "context": 256000, + "output": 65536 +>>>>>>> upstream/main } }, { @@ -134148,6 +138065,7 @@ } }, { +<<<<<<< HEAD "id": "xiaomi-token-plan-ams/mimo-v2-flash", "name": "MiMo-V2-Flash", "family": "mimo", @@ -134178,6 +138096,8 @@ } }, { +======= +>>>>>>> upstream/main "id": "xiaomi-token-plan-ams/mimo-v2-omni", "name": "MiMo-V2-Omni", "family": "mimo", @@ -134265,7 +138185,7 @@ }, "limit": { "context": 8192, - "output": 16384 + "output": 8192 } }, { @@ -134302,7 +138222,477 @@ } }, { - "id": "xiaomi-token-plan-ams/mimo-v2.5-pro", + "id": "xiaomi-token-plan-ams/mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-ams/mimo-v2.5-tts", + "name": "MiMo-V2.5-TTS", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-ams/mimo-v2.5-tts-voiceclone", + "name": "MiMo-V2.5-TTS-VoiceClone", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-ams/mimo-v2.5-tts-voicedesign", + "name": "MiMo-V2.5-TTS-VoiceDesign", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 262144, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2-tts", + "name": "MiMo-V2-TTS", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2.5-pro", + "name": "MiMo-V2.5-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2.5-tts", + "name": "MiMo-V2.5-TTS", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2.5-tts-voiceclone", + "name": "MiMo-V2.5-TTS-VoiceClone", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-cn/mimo-v2.5-tts-voicedesign", + "name": "MiMo-V2.5-TTS-VoiceDesign", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-sgp/mimo-v2-omni", + "name": "MiMo-V2-Omni", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video", + "pdf" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 262144, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-sgp/mimo-v2-pro", + "name": "MiMo-V2-Pro", + "family": "mimo", + "attachment": false, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "text" + ] + }, + "open_weights": false, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-sgp/mimo-v2-tts", + "name": "MiMo-V2-TTS", + "family": "mimo", + "attachment": false, + "reasoning": false, + "tool_call": false, + "release_date": "2026-03-18", + "last_updated": "2026-03-18", + "modalities": { + "input": [ + "text" + ], + "output": [ + "audio" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0 + }, + "limit": { + "context": 8192, + "output": 8192 + } + }, + { + "id": "xiaomi-token-plan-sgp/mimo-v2.5", + "name": "MiMo-V2.5", + "family": "mimo", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2024-12", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", + "modalities": { + "input": [ + "text", + "image", + "audio", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.0, + "output": 0.0, + "cache_read": 0.0 + }, + "limit": { + "context": 1048576, + "output": 131072 + } + }, + { + "id": "xiaomi-token-plan-sgp/mimo-v2.5-pro", "name": "MiMo-V2.5-Pro", "family": "mimo", "attachment": false, @@ -134332,108 +138722,14 @@ } }, { - "id": "xiaomi-token-plan-cn/mimo-v2-flash", - "name": "MiMo-V2-Flash", - "family": "mimo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12-01", - "release_date": "2025-12-16", - "last_updated": "2026-02-04", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 262144, - "output": 65536 - } - }, - { - "id": "xiaomi-token-plan-cn/mimo-v2-omni", - "name": "MiMo-V2-Omni", - "family": "mimo", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { - "input": [ - "text", - "image", - "audio", - "video", - "pdf" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 262144, - "output": 131072 - } - }, - { - "id": "xiaomi-token-plan-cn/mimo-v2-pro", - "name": "MiMo-V2-Pro", - "family": "mimo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 1048576, - "output": 131072 - } - }, - { - "id": "xiaomi-token-plan-cn/mimo-v2-tts", - "name": "MiMo-V2-TTS", + "id": "xiaomi-token-plan-sgp/mimo-v2.5-tts", + "name": "MiMo-V2.5-TTS", "family": "mimo", "attachment": false, "reasoning": false, "tool_call": false, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", "modalities": { "input": [ "text" @@ -134449,175 +138745,18 @@ }, "limit": { "context": 8192, - "output": 16384 - } - }, - { - "id": "xiaomi-token-plan-cn/mimo-v2.5", - "name": "MiMo-V2.5", - "family": "mimo", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-04-22", - "last_updated": "2026-04-22", - "modalities": { - "input": [ - "text", - "image", - "audio", - "video" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 1048576, - "output": 131072 - } - }, - { - "id": "xiaomi-token-plan-cn/mimo-v2.5-pro", - "name": "MiMo-V2.5-Pro", - "family": "mimo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-04-22", - "last_updated": "2026-04-22", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 1048576, - "output": 131072 - } - }, - { - "id": "xiaomi-token-plan-sgp/mimo-v2-flash", - "name": "MiMo-V2-Flash", - "family": "mimo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12-01", - "release_date": "2025-12-16", - "last_updated": "2026-02-04", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 262144, - "output": 65536 - } - }, - { - "id": "xiaomi-token-plan-sgp/mimo-v2-omni", - "name": "MiMo-V2-Omni", - "family": "mimo", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { - "input": [ - "text", - "image", - "audio", - "video", - "pdf" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 262144, - "output": 131072 - } - }, - { - "id": "xiaomi-token-plan-sgp/mimo-v2-pro", - "name": "MiMo-V2-Pro", - "family": "mimo", - "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-03-18", - "last_updated": "2026-03-18", - "modalities": { - "input": [ - "text" - ], - "output": [ - "text" - ] - }, - "open_weights": false, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 1048576, - "output": 131072 + "output": 8192 } }, { - "id": "xiaomi-token-plan-sgp/mimo-v2-tts", - "name": "MiMo-V2-TTS", + "id": "xiaomi-token-plan-sgp/mimo-v2.5-tts-voiceclone", + "name": "MiMo-V2.5-TTS-VoiceClone", "family": "mimo", "attachment": false, "reasoning": false, "tool_call": false, - "release_date": "2026-03-18", - "last_updated": "2026-03-18", + "release_date": "2026-04-22", + "last_updated": "2026-04-22", "modalities": { "input": [ "text" @@ -134633,51 +138772,16 @@ }, "limit": { "context": 8192, - "output": 16384 - } - }, - { - "id": "xiaomi-token-plan-sgp/mimo-v2.5", - "name": "MiMo-V2.5", - "family": "mimo", - "attachment": true, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", - "release_date": "2026-04-22", - "last_updated": "2026-04-22", - "modalities": { - "input": [ - "text", - "image", - "audio", - "video" - ], - "output": [ - "text" - ] - }, - "open_weights": true, - "cost": { - "input": 0.0, - "output": 0.0, - "cache_read": 0.0 - }, - "limit": { - "context": 1048576, - "output": 131072 + "output": 8192 } }, { - "id": "xiaomi-token-plan-sgp/mimo-v2.5-pro", - "name": "MiMo-V2.5-Pro", + "id": "xiaomi-token-plan-sgp/mimo-v2.5-tts-voicedesign", + "name": "MiMo-V2.5-TTS-VoiceDesign", "family": "mimo", "attachment": false, - "reasoning": true, - "tool_call": true, - "temperature": true, - "knowledge": "2024-12", + "reasoning": false, + "tool_call": false, "release_date": "2026-04-22", "last_updated": "2026-04-22", "modalities": { @@ -134685,18 +138789,17 @@ "text" ], "output": [ - "text" + "audio" ] }, "open_weights": true, "cost": { "input": 0.0, - "output": 0.0, - "cache_read": 0.0 + "output": 0.0 }, "limit": { - "context": 1048576, - "output": 131072 + "context": 8192, + "output": 8192 } }, { @@ -134858,7 +138961,7 @@ }, { "id": "xpersona/xpersona-frieren-coder", - "name": "Xpersona Frieren Coder", + "name": "Xpersona Frieren 1", "attachment": false, "reasoning": true, "tool_call": true, @@ -138361,6 +142464,37 @@ "output": 98304 } }, + { + "id": "zhipuai-coding-plan/glm-4.6v", + "name": "GLM-4.6V", + "family": "glm", + "attachment": true, + "reasoning": true, + "tool_call": true, + "temperature": true, + "knowledge": "2025-04", + "release_date": "2025-12-08", + "last_updated": "2025-12-08", + "modalities": { + "input": [ + "text", + "image", + "video" + ], + "output": [ + "text" + ] + }, + "open_weights": true, + "cost": { + "input": 0.3, + "output": 0.9 + }, + "limit": { + "context": 128000, + "output": 32768 + } + }, { "id": "zhipuai-coding-plan/glm-4.7", "name": "GLM-4.7", diff --git a/crates/goose/src/providers/canonical/data/provider_metadata.json b/crates/goose/src/providers/canonical/data/provider_metadata.json index d16fc1bf045f..3c88796eef39 100644 --- a/crates/goose/src/providers/canonical/data/provider_metadata.json +++ b/crates/goose/src/providers/canonical/data/provider_metadata.json @@ -1,113 +1,14 @@ [ { - "id": "helicone", - "display_name": "Helicone", - "npm": "@ai-sdk/openai-compatible", - "api": "https://ai-gateway.helicone.ai/v1", - "doc": "https://helicone.ai/models", - "env": [ - "HELICONE_API_KEY" - ], - "model_count": 90 - }, - { - "id": "auriko", - "display_name": "Auriko", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.auriko.ai/v1", - "doc": "https://docs.auriko.ai", - "env": [ - "AURIKO_API_KEY" - ], - "model_count": 15 - }, - { - "id": "firepass", - "display_name": "Fireworks (Firepass)", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.fireworks.ai/inference/v1/", - "doc": "https://docs.fireworks.ai/firepass", - "env": [ - "FIREPASS_API_KEY" - ], - "model_count": 1 - }, - { - "id": "nano-gpt", - "display_name": "NanoGPT", - "npm": "@ai-sdk/openai-compatible", - "api": "https://nano-gpt.com/api/v1", - "doc": "https://docs.nano-gpt.com", - "env": [ - "NANO_GPT_API_KEY" - ], - "model_count": 525 - }, - { - "id": "io-net", - "display_name": "IO.NET", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.intelligence.io.solutions/api/v1", - "doc": "https://io.net/docs/guides/intelligence/io-intelligence", - "env": [ - "IOINTELLIGENCE_API_KEY" - ], - "model_count": 17 - }, - { - "id": "inception", - "display_name": "Inception", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.inceptionlabs.ai/v1/", - "doc": "https://platform.inceptionlabs.ai/docs", - "env": [ - "INCEPTION_API_KEY" - ], - "model_count": 2 - }, - { - "id": "submodel", - "display_name": "submodel", - "npm": "@ai-sdk/openai-compatible", - "api": "https://llm.submodel.ai/v1", - "doc": "https://submodel.gitbook.io", - "env": [ - "SUBMODEL_INSTAGEN_ACCESS_KEY" - ], - "model_count": 9 - }, - { - "id": "requesty", - "display_name": "Requesty", - "npm": "@ai-sdk/openai-compatible", - "api": "https://router.requesty.ai/v1", - "doc": "https://requesty.ai/solution/llm-routing/models", - "env": [ - "REQUESTY_API_KEY" - ], - "model_count": 38 - }, - { - "id": "zai", - "display_name": "Z.AI", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.z.ai/api/paas/v4", - "doc": "https://docs.z.ai/guides/overview/pricing", - "env": [ - "ZHIPU_API_KEY" - ], - "model_count": 13 - }, - { - "id": "zai-coding-plan", - "display_name": "Z.AI Coding Plan", + "id": "upstage", + "display_name": "Upstage", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.z.ai/api/coding/paas/v4", - "doc": "https://docs.z.ai/devpack/overview", + "api": "https://api.upstage.ai/v1/solar", + "doc": "https://developers.upstage.ai/docs/apis/chat", "env": [ - "ZHIPU_API_KEY" + "UPSTAGE_API_KEY" ], - "model_count": 5 + "model_count": 3 }, { "id": "clarifai", @@ -121,48 +22,37 @@ "model_count": 12 }, { - "id": "moark", - "display_name": "Moark", - "npm": "@ai-sdk/openai-compatible", - "api": "https://moark.com/v1", - "doc": "https://moark.com/docs/openapi/v1#tag/%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90", - "env": [ - "MOARK_API_KEY" - ], - "model_count": 2 - }, - { - "id": "frogbot", - "display_name": "FrogBot", + "id": "ollama-cloud", + "display_name": "Ollama Cloud", "npm": "@ai-sdk/openai-compatible", - "api": "https://app.frogbot.ai/api/v1", - "doc": "https://docs.frogbot.ai", + "api": "https://ollama.com/v1", + "doc": "https://docs.ollama.com/cloud", "env": [ - "FROGBOT_API_KEY" + "OLLAMA_API_KEY" ], - "model_count": 26 + "model_count": 40 }, { - "id": "wandb", - "display_name": "Weights & Biases", + "id": "the-grid-ai", + "display_name": "The Grid AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.inference.wandb.ai/v1", - "doc": "https://docs.wandb.ai/guides/integrations/inference/", + "api": "https://api.thegrid.ai/v1", + "doc": "https://thegrid.ai/docs", "env": [ - "WANDB_API_KEY" + "THEGRIDAI_API_KEY" ], - "model_count": 18 + "model_count": 9 }, { - "id": "gmicloud", - "display_name": "GMI Cloud", + "id": "fireworks-ai", + "display_name": "Fireworks AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.gmi-serving.com/v1", - "doc": "https://docs.gmicloud.ai/inference-engine/api-reference/llm-api-reference", + "api": "https://api.fireworks.ai/inference/v1/", + "doc": "https://fireworks.ai/docs/", "env": [ - "GMICLOUD_API_KEY" + "FIREWORKS_API_KEY" ], - "model_count": 8 + "model_count": 12 }, { "id": "crof", @@ -187,12 +77,13 @@ "model_count": 2 }, { - "id": "routing-run", - "display_name": "routing.run", + "id": "stackit", + "display_name": "STACKIT", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.routing.run/v1", - "doc": "https://docs.routing.run/api-reference/models", + "api": "https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1", + "doc": "https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models", "env": [ +<<<<<<< HEAD "ROUTING_RUN_API_KEY" ], "model_count": 24 @@ -227,52 +118,66 @@ "doc": "https://cloud.tencent.com/document/product/1772/128947", "env": [ "TENCENT_CODING_PLAN_API_KEY" +======= + "STACKIT_API_KEY" +>>>>>>> upstream/main ], "model_count": 8 }, { - "id": "cortecs", - "display_name": "Cortecs", + "id": "ovhcloud", + "display_name": "OVHcloud AI Endpoints", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.cortecs.ai/v1", - "doc": "https://api.cortecs.ai/v1/models", + "api": "https://oai.endpoints.kepler.ai.cloud.ovh.net/v1", + "doc": "https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog//", "env": [ - "CORTECS_API_KEY" + "OVHCLOUD_API_KEY" ], - "model_count": 49 + "model_count": 11 }, { - "id": "baseten", - "display_name": "Baseten", + "id": "iflowcn", + "display_name": "iFlow", "npm": "@ai-sdk/openai-compatible", - "api": "https://inference.baseten.co/v1", - "doc": "https://docs.baseten.co/development/model-apis/overview", + "api": "https://apis.iflow.cn/v1", + "doc": "https://platform.iflow.cn/en/docs", "env": [ - "BASETEN_API_KEY" + "IFLOW_API_KEY" ], "model_count": 14 }, { - "id": "meta-llama", - "display_name": "Llama", + "id": "302ai", + "display_name": "302.AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.llama.com/compat/v1/", - "doc": "https://llama.developer.meta.com/docs/models", + "api": "https://api.302.ai/v1", + "doc": "https://doc.302.ai", "env": [ - "LLAMA_API_KEY" + "302AI_API_KEY" ], - "model_count": 7 + "model_count": 97 }, { - "id": "novita-ai", - "display_name": "NovitaAI", + "id": "nano-gpt", + "display_name": "NanoGPT", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.novita.ai/openai", - "doc": "https://novita.ai/docs/guides/introduction", + "api": "https://nano-gpt.com/api/v1", + "doc": "https://docs.nano-gpt.com", "env": [ - "NOVITA_API_KEY" + "NANO_GPT_API_KEY" + ], + "model_count": 525 + }, + { + "id": "alibaba-cn", + "display_name": "Alibaba (China)", + "npm": "@ai-sdk/openai-compatible", + "api": "https://dashscope.aliyuncs.com/compatible-mode/v1", + "doc": "https://www.alibabacloud.com/help/en/model-studio/models", + "env": [ + "DASHSCOPE_API_KEY" ], - "model_count": 99 + "model_count": 82 }, { "id": "digitalocean", @@ -283,73 +188,121 @@ "env": [ "DIGITALOCEAN_ACCESS_TOKEN" ], - "model_count": 76 + "model_count": 78 }, { - "id": "moonshotai", - "display_name": "Moonshot AI", + "id": "submodel", + "display_name": "submodel", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.moonshot.ai/v1", - "doc": "https://platform.moonshot.ai/docs/api/chat", + "api": "https://llm.submodel.ai/v1", + "doc": "https://submodel.gitbook.io", "env": [ - "MOONSHOT_API_KEY" + "SUBMODEL_INSTAGEN_ACCESS_KEY" ], - "model_count": 7 + "model_count": 9 }, { - "id": "kilo", - "display_name": "Kilo Gateway", + "id": "bailing", + "display_name": "Bailing", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.kilo.ai/api/gateway", - "doc": "https://kilo.ai", + "api": "https://api.tbox.cn/api/llm/v1/chat/completions", + "doc": "https://alipaytbox.yuque.com/sxs0ba/ling/intro", "env": [ - "KILO_API_KEY" + "BAILING_API_TOKEN" ], - "model_count": 344 + "model_count": 2 }, { - "id": "cloudflare-workers-ai", - "display_name": "Cloudflare Workers AI", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", - "doc": "https://developers.cloudflare.com/workers-ai/models/", + "id": "kimi-for-coding", + "display_name": "Kimi For Coding", + "npm": "@ai-sdk/anthropic", + "api": "https://api.kimi.com/coding/v1", + "doc": "https://www.kimi.com/coding/docs/en/third-party-agents.html", "env": [ - "CLOUDFLARE_ACCOUNT_ID", - "CLOUDFLARE_API_KEY" + "KIMI_API_KEY" + ], + "model_count": 3 + }, + { + "id": "dinference", + "display_name": "DInference", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.dinference.com/v1", + "doc": "https://dinference.com", + "env": [ + "DINFERENCE_API_KEY" + ], + "model_count": 5 + }, + { + "id": "novita-ai", + "display_name": "NovitaAI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.novita.ai/openai", + "doc": "https://novita.ai/docs/guides/introduction", + "env": [ + "NOVITA_API_KEY" + ], + "model_count": 104 + }, + { + "id": "kilo", + "display_name": "Kilo Gateway", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.kilo.ai/api/gateway", + "doc": "https://kilo.ai", + "env": [ + "KILO_API_KEY" + ], + "model_count": 345 + }, + { + "id": "regolo-ai", + "display_name": "Regolo AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.regolo.ai/v1", + "doc": "https://docs.regolo.ai/", + "env": [ + "REGOLO_API_KEY" ], +<<<<<<< HEAD "model_count": 27 +======= + "model_count": 13 +>>>>>>> upstream/main }, { - "id": "lmstudio", - "display_name": "LMStudio", + "id": "deepseek", + "display_name": "DeepSeek", "npm": "@ai-sdk/openai-compatible", - "api": "http://127.0.0.1:1234/v1", - "doc": "https://lmstudio.ai/models", + "api": "https://api.deepseek.com", + "doc": "https://api-docs.deepseek.com/quick_start/pricing", "env": [ - "LMSTUDIO_API_KEY" + "DEEPSEEK_API_KEY" ], - "model_count": 3 + "model_count": 4 }, { - "id": "xiaomi-token-plan-cn", - "display_name": "Xiaomi Token Plan (China)", + "id": "orcarouter", + "display_name": "OrcaRouter", "npm": "@ai-sdk/openai-compatible", - "api": "https://token-plan-cn.xiaomimimo.com/v1", - "doc": "https://platform.xiaomimimo.com/#/docs", + "api": "https://api.orcarouter.ai/v1", + "doc": "https://docs.orcarouter.ai", "env": [ - "XIAOMI_API_KEY" + "ORCAROUTER_API_KEY" ], - "model_count": 6 + "model_count": 81 }, { - "id": "morph", - "display_name": "Morph", + "id": "moonshotai-cn", + "display_name": "Moonshot AI (China)", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.morphllm.com/v1", - "doc": "https://docs.morphllm.com/api-reference/introduction", + "api": "https://api.moonshot.cn/v1", + "doc": "https://platform.moonshot.cn/docs/api/chat", "env": [ - "MORPH_API_KEY" + "MOONSHOT_API_KEY" ], +<<<<<<< HEAD "model_count": 3 }, { @@ -385,6 +338,9 @@ "PRIVATEMODE_ENDPOINT" ], "model_count": 5 +======= + "model_count": 7 +>>>>>>> upstream/main }, { "id": "minimax-cn-coding-plan", @@ -398,136 +354,141 @@ "model_count": 6 }, { - "id": "xiaomi-token-plan-ams", - "display_name": "Xiaomi Token Plan (Europe)", + "id": "inception", + "display_name": "Inception", "npm": "@ai-sdk/openai-compatible", - "api": "https://token-plan-ams.xiaomimimo.com/v1", - "doc": "https://platform.xiaomimimo.com/#/docs", + "api": "https://api.inceptionlabs.ai/v1/", + "doc": "https://platform.inceptionlabs.ai/docs", "env": [ - "XIAOMI_API_KEY" + "INCEPTION_API_KEY" ], - "model_count": 6 + "model_count": 2 }, { - "id": "cloudferro-sherlock", - "display_name": "CloudFerro Sherlock", + "id": "kuae-cloud-coding-plan", + "display_name": "KUAE Cloud Coding Plan", "npm": "@ai-sdk/openai-compatible", - "api": "https://api-sherlock.cloudferro.com/openai/v1/", - "doc": "https://docs.sherlock.cloudferro.com/", + "api": "https://coding-plan-endpoint.kuaecloud.net/v1", + "doc": "https://docs.mthreads.com/kuaecloud/kuaecloud-doc-online/coding_plan/", "env": [ - "CLOUDFERRO_SHERLOCK_API_KEY" + "KUAE_API_KEY" ], - "model_count": 5 + "model_count": 1 }, { - "id": "dinference", - "display_name": "DInference", + "id": "chutes", + "display_name": "Chutes", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.dinference.com/v1", - "doc": "https://dinference.com", + "api": "https://llm.chutes.ai/v1", + "doc": "https://llm.chutes.ai/v1/models", "env": [ - "DINFERENCE_API_KEY" + "CHUTES_API_KEY" ], - "model_count": 5 + "model_count": 39 }, { - "id": "vivgrid", - "display_name": "Vivgrid", - "npm": "@ai-sdk/openai", - "api": "https://api.vivgrid.com/v1", - "doc": "https://docs.vivgrid.com/models", + "id": "crof", + "display_name": "CrofAI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://crof.ai/v1", + "doc": "https://crof.ai/docs", "env": [ - "VIVGRID_API_KEY" + "CROF_API_KEY" ], - "model_count": 13 + "model_count": 21 }, { - "id": "vultr", - "display_name": "Vultr", + "id": "frogbot", + "display_name": "FrogBot", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.vultrinference.com/v1", - "doc": "https://api.vultrinference.com/", + "api": "https://app.frogbot.ai/api/v1", + "doc": "https://docs.frogbot.ai", "env": [ - "VULTR_API_KEY" + "FROGBOT_API_KEY" ], - "model_count": 7 + "model_count": 26 }, { - "id": "kuae-cloud-coding-plan", - "display_name": "KUAE Cloud Coding Plan", + "id": "alibaba", + "display_name": "Alibaba", "npm": "@ai-sdk/openai-compatible", - "api": "https://coding-plan-endpoint.kuaecloud.net/v1", - "doc": "https://docs.mthreads.com/kuaecloud/kuaecloud-doc-online/coding_plan/", + "api": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", + "doc": "https://www.alibabacloud.com/help/en/model-studio/models", "env": [ - "KUAE_API_KEY" + "DASHSCOPE_API_KEY" ], - "model_count": 1 + "model_count": 50 }, { - "id": "modelscope", - "display_name": "ModelScope", + "id": "xiaomi", + "display_name": "Xiaomi", "npm": "@ai-sdk/openai-compatible", - "api": "https://api-inference.modelscope.cn/v1", - "doc": "https://modelscope.cn/docs/model-service/API-Inference/intro", + "api": "https://api.xiaomimimo.com/v1", + "doc": "https://platform.xiaomimimo.com/#/docs", "env": [ - "MODELSCOPE_API_KEY" + "XIAOMI_API_KEY" ], - "model_count": 7 + "model_count": 5 }, { - "id": "kimi-for-coding", - "display_name": "Kimi For Coding", - "npm": "@ai-sdk/anthropic", - "api": "https://api.kimi.com/coding/v1", - "doc": "https://www.kimi.com/coding/docs/en/third-party-agents.html", + "id": "vivgrid", + "display_name": "Vivgrid", + "npm": "@ai-sdk/openai", + "api": "https://api.vivgrid.com/v1", + "doc": "https://docs.vivgrid.com/models", "env": [ - "KIMI_API_KEY" + "VIVGRID_API_KEY" ], - "model_count": 3 + "model_count": 13 }, { - "id": "lucidquery", - "display_name": "LucidQuery AI", + "id": "databricks", + "display_name": "Databricks", "npm": "@ai-sdk/openai-compatible", - "api": "https://lucidquery.com/api/v1", - "doc": "https://lucidquery.com/api/docs", + "api": "https://${DATABRICKS_HOST}/ai-gateway/mlflow/v1", + "doc": "https://docs.databricks.com/aws/en/machine-learning/foundation-models/", "env": [ - "LUCIDQUERY_API_KEY" + "DATABRICKS_HOST", + "DATABRICKS_TOKEN" ], - "model_count": 2 +<<<<<<< HEAD + "model_count": 7 +======= + "model_count": 25 +>>>>>>> upstream/main }, { - "id": "neuralwatt", - "display_name": "Neuralwatt", + "id": "siliconflow-cn", + "display_name": "SiliconFlow (China)", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.neuralwatt.com/v1", - "doc": "https://portal.neuralwatt.com/docs", + "api": "https://api.siliconflow.cn/v1", + "doc": "https://cloud.siliconflow.com/models", "env": [ - "NEURALWATT_API_KEY" + "SILICONFLOW_CN_API_KEY" ], - "model_count": 14 + "model_count": 82 }, { - "id": "jiekou", - "display_name": "Jiekou.AI", + "id": "zhipuai-coding-plan", + "display_name": "Zhipu AI Coding Plan", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.jiekou.ai/openai", - "doc": "https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_models.dev", + "api": "https://open.bigmodel.cn/api/coding/paas/v4", + "doc": "https://docs.bigmodel.cn/cn/coding-plan/overview", "env": [ - "JIEKOU_API_KEY" + "ZHIPU_API_KEY" ], - "model_count": 61 + "model_count": 6 }, { - "id": "ovhcloud", - "display_name": "OVHcloud AI Endpoints", + "id": "neuralwatt", + "display_name": "Neuralwatt", "npm": "@ai-sdk/openai-compatible", - "api": "https://oai.endpoints.kepler.ai.cloud.ovh.net/v1", - "doc": "https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog//", + "api": "https://api.neuralwatt.com/v1", + "doc": "https://portal.neuralwatt.com/docs", "env": [ - "OVHCLOUD_API_KEY" + "NEURALWATT_API_KEY" ], - "model_count": 11 + "model_count": 14 }, { "id": "friendli", @@ -541,48 +502,72 @@ "model_count": 6 }, { - "id": "regolo-ai", - "display_name": "Regolo AI", + "id": "github-copilot", + "display_name": "GitHub Copilot", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.regolo.ai/v1", - "doc": "https://docs.regolo.ai/", + "api": "https://api.githubcopilot.com", + "doc": "https://docs.github.com/en/copilot", "env": [ - "REGOLO_API_KEY" + "GITHUB_TOKEN" ], - "model_count": 13 + "model_count": 29 }, { - "id": "claudinio", - "display_name": "Claudinio", + "id": "inference", + "display_name": "Inference", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.claudin.io/v1", - "doc": "https://claudin.io", + "api": "https://inference.net/v1", + "doc": "https://inference.net/models", "env": [ - "CLAUDINIO_API_KEY" + "INFERENCE_API_KEY" ], - "model_count": 1 + "model_count": 9 }, { - "id": "orcarouter", - "display_name": "OrcaRouter", - "npm": "@ai-sdk/openai-compatible", - "api": "https://api.orcarouter.ai/v1", - "doc": "https://docs.orcarouter.ai", + "id": "huggingface", + "display_name": "Hugging Face", + "npm": "@ai-sdk/openai-compatible", + "api": "https://router.huggingface.co/v1", + "doc": "https://huggingface.co/docs/inference-providers", "env": [ - "ORCAROUTER_API_KEY" + "HF_TOKEN" ], - "model_count": 81 + "model_count": 24 }, { - "id": "opencode-go", - "display_name": "OpenCode Go", + "id": "privatemode-ai", + "display_name": "Privatemode AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://opencode.ai/zen/go/v1", - "doc": "https://opencode.ai/docs/zen", + "api": "http://localhost:8080/v1", + "doc": "https://docs.privatemode.ai/api/overview", "env": [ - "OPENCODE_API_KEY" + "PRIVATEMODE_API_KEY", + "PRIVATEMODE_ENDPOINT" ], - "model_count": 14 + "model_count": 5 + }, + { + "id": "snowflake-cortex", + "display_name": "Snowflake Cortex", + "npm": "@ai-sdk/openai-compatible", + "api": "https://${SNOWFLAKE_ACCOUNT}.snowflakecomputing.com/api/v2/cortex/v1", + "doc": "https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-rest-api", + "env": [ + "SNOWFLAKE_ACCOUNT", + "SNOWFLAKE_CORTEX_PAT" + ], + "model_count": 11 + }, + { + "id": "moonshotai", + "display_name": "Moonshot AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.moonshot.ai/v1", + "doc": "https://platform.moonshot.ai/docs/api/chat", + "env": [ + "MOONSHOT_API_KEY" + ], + "model_count": 7 }, { "id": "llmgateway", @@ -596,14 +581,15 @@ "model_count": 188 }, { - "id": "poe", - "display_name": "Poe", + "id": "moark", + "display_name": "Moark", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.poe.com/v1", - "doc": "https://creator.poe.com/docs/external-applications/openai-compatible-api", + "api": "https://moark.com/v1", + "doc": "https://moark.com/docs/openapi/v1#tag/%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90", "env": [ - "POE_API_KEY" + "MOARK_API_KEY" ], +<<<<<<< HEAD "model_count": 136 }, { @@ -760,6 +746,9 @@ "ATOMIC_CHAT_API_KEY" ], "model_count": 5 +======= + "model_count": 2 +>>>>>>> upstream/main }, { "id": "github-models", @@ -773,25 +762,26 @@ "model_count": 55 }, { - "id": "qiniu-ai", - "display_name": "Qiniu", + "id": "xiaomi-token-plan-cn", + "display_name": "Xiaomi Token Plan (China)", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.qnaigc.com/v1", - "doc": "https://developer.qiniu.com/aitokenapi", + "api": "https://token-plan-cn.xiaomimimo.com/v1", + "doc": "https://platform.xiaomimimo.com/#/docs", "env": [ - "QINIU_API_KEY" + "XIAOMI_API_KEY" ], - "model_count": 91 + "model_count": 8 }, { - "id": "scaleway", - "display_name": "Scaleway", + "id": "lmstudio", + "display_name": "LMStudio", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.scaleway.ai/v1", - "doc": "https://www.scaleway.com/en/docs/generative-apis/", + "api": "http://127.0.0.1:1234/v1", + "doc": "https://lmstudio.ai/models", "env": [ - "SCALEWAY_API_KEY" + "LMSTUDIO_API_KEY" ], +<<<<<<< HEAD "model_count": 16 }, { @@ -815,6 +805,9 @@ "MIXLAYER_API_KEY" ], "model_count": 5 +======= + "model_count": 3 +>>>>>>> upstream/main }, { "id": "zenmux", @@ -828,15 +821,15 @@ "model_count": 96 }, { - "id": "perplexity-agent", - "display_name": "Perplexity Agent", - "npm": "@ai-sdk/openai", - "api": "https://api.perplexity.ai/v1", - "doc": "https://docs.perplexity.ai/docs/agent-api/models", + "id": "claudinio", + "display_name": "Claudinio", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.claudin.io/v1", + "doc": "https://claudin.io", "env": [ - "PERPLEXITY_API_KEY" + "CLAUDINIO_API_KEY" ], - "model_count": 18 + "model_count": 1 }, { "id": "alibaba-coding-plan", @@ -848,116 +841,108 @@ "ALIBABA_CODING_PLAN_API_KEY" ], "model_count": 11 +<<<<<<< HEAD +======= }, { - "id": "meganova", - "display_name": "Meganova", + "id": "modelscope", + "display_name": "ModelScope", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.meganova.ai/v1", - "doc": "https://docs.meganova.ai", + "api": "https://api-inference.modelscope.cn/v1", + "doc": "https://modelscope.cn/docs/model-service/API-Inference/intro", "env": [ - "MEGANOVA_API_KEY" + "MODELSCOPE_API_KEY" ], - "model_count": 19 + "model_count": 7 }, { - "id": "synthetic", - "display_name": "Synthetic", + "id": "qihang-ai", + "display_name": "QiHang", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.synthetic.new/openai/v1", - "doc": "https://synthetic.new/pricing", + "api": "https://api.qhaigc.net/v1", + "doc": "https://www.qhaigc.net/docs", "env": [ - "SYNTHETIC_API_KEY" + "QIHANG_API_KEY" ], - "model_count": 33 + "model_count": 9 +>>>>>>> upstream/main }, { - "id": "inceptron", - "display_name": "Inceptron", + "id": "poe", + "display_name": "Poe", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.inceptron.io/v1", - "doc": "https://docs.inceptron.io", - "env": [ - "INCEPTRON_API_KEY" - ], - "model_count": 4 - }, - { - "id": "minimax-coding-plan", - "display_name": "MiniMax Token Plan (minimax.io)", - "npm": "@ai-sdk/anthropic", - "api": "https://api.minimax.io/anthropic/v1", - "doc": "https://platform.minimax.io/docs/token-plan/intro", + "api": "https://api.poe.com/v1", + "doc": "https://creator.poe.com/docs/external-applications/openai-compatible-api", "env": [ - "MINIMAX_API_KEY" + "POE_API_KEY" ], - "model_count": 6 + "model_count": 137 }, { - "id": "upstage", - "display_name": "Upstage", + "id": "umans-ai-coding-plan", + "display_name": "Umans AI Coding Plan", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.upstage.ai/v1/solar", - "doc": "https://developers.upstage.ai/docs/apis/chat", + "api": "https://api.code.umans.ai/v1", + "doc": "https://app.umans.ai/offers/code/docs", "env": [ - "UPSTAGE_API_KEY" + "UMANS_AI_CODING_PLAN_API_KEY" ], - "model_count": 3 + "model_count": 5 }, { - "id": "abliteration-ai", - "display_name": "abliteration.ai", + "id": "firepass", + "display_name": "Fireworks (Firepass)", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.abliteration.ai/v1", - "doc": "https://docs.abliteration.ai/models", + "api": "https://api.fireworks.ai/inference/v1/", + "doc": "https://docs.fireworks.ai/firepass", "env": [ - "ABLIT_KEY" + "FIREPASS_API_KEY" ], "model_count": 1 }, { - "id": "deepseek", - "display_name": "DeepSeek", + "id": "gmicloud", + "display_name": "GMI Cloud", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.deepseek.com", - "doc": "https://api-docs.deepseek.com/quick_start/pricing", + "api": "https://api.gmi-serving.com/v1", + "doc": "https://docs.gmicloud.ai/inference-engine/api-reference/llm-api-reference", "env": [ - "DEEPSEEK_API_KEY" + "GMICLOUD_API_KEY" ], - "model_count": 4 + "model_count": 8 }, { - "id": "iflowcn", - "display_name": "iFlow", + "id": "mixlayer", + "display_name": "Mixlayer", "npm": "@ai-sdk/openai-compatible", - "api": "https://apis.iflow.cn/v1", - "doc": "https://platform.iflow.cn/en/docs", + "api": "https://models.mixlayer.ai/v1", + "doc": "https://docs.mixlayer.com", "env": [ - "IFLOW_API_KEY" + "MIXLAYER_API_KEY" ], - "model_count": 14 + "model_count": 5 }, { - "id": "stackit", - "display_name": "STACKIT", + "id": "inceptron", + "display_name": "Inceptron", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1", - "doc": "https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models", + "api": "https://api.inceptron.io/v1", + "doc": "https://docs.inceptron.io", "env": [ - "STACKIT_API_KEY" + "INCEPTRON_API_KEY" ], - "model_count": 8 + "model_count": 4 }, { - "id": "wafer.ai", - "display_name": "Wafer", - "npm": "@ai-sdk/openai-compatible", - "api": "https://pass.wafer.ai/v1", - "doc": "https://docs.wafer.ai/wafer-pass", + "id": "minimax-coding-plan", + "display_name": "MiniMax Token Plan (minimax.io)", + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimax.io/anthropic/v1", + "doc": "https://platform.minimax.io/docs/token-plan/intro", "env": [ - "WAFER_API_KEY" + "MINIMAX_API_KEY" ], - "model_count": 4 + "model_count": 6 }, { "id": "evroc", @@ -971,64 +956,178 @@ "model_count": 13 }, { - "id": "nova", - "display_name": "Nova", + "id": "nvidia", + "display_name": "Nvidia", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.nova.amazon.com/v1", - "doc": "https://nova.amazon.com/dev/documentation", + "api": "https://integrate.api.nvidia.com/v1", + "doc": "https://docs.api.nvidia.com/nim/", "env": [ - "NOVA_API_KEY" + "NVIDIA_API_KEY" ], - "model_count": 2 + "model_count": 93 }, { - "id": "fireworks-ai", - "display_name": "Fireworks AI", + "id": "routing-run", + "display_name": "routing.run", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.fireworks.ai/inference/v1/", - "doc": "https://fireworks.ai/docs/", + "api": "https://ai.routing.sh/v1", + "doc": "https://docs.routing.run/api-reference/models", "env": [ - "FIREWORKS_API_KEY" + "ROUTING_RUN_API_KEY" ], - "model_count": 12 + "model_count": 26 }, { - "id": "alibaba", - "display_name": "Alibaba", + "id": "xiaomi-token-plan-ams", + "display_name": "Xiaomi Token Plan (Europe)", "npm": "@ai-sdk/openai-compatible", - "api": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", - "doc": "https://www.alibabacloud.com/help/en/model-studio/models", + "api": "https://token-plan-ams.xiaomimimo.com/v1", + "doc": "https://platform.xiaomimimo.com/#/docs", "env": [ - "DASHSCOPE_API_KEY" + "XIAOMI_API_KEY" ], - "model_count": 50 + "model_count": 8 }, { - "id": "302ai", - "display_name": "302.AI", + "id": "zhipuai", + "display_name": "Zhipu AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.302.ai/v1", - "doc": "https://doc.302.ai", + "api": "https://open.bigmodel.cn/api/paas/v4", + "doc": "https://docs.z.ai/guides/overview/pricing", "env": [ - "302AI_API_KEY" + "ZHIPU_API_KEY" ], - "model_count": 97 + "model_count": 12 }, { - "id": "xpersona", - "display_name": "Xpersona", - "npm": "@ai-sdk/openai-compatible", - "api": "https://www.xpersona.co/v1", - "doc": "https://www.xpersona.co/docs", + "id": "io-net", + "display_name": "IO.NET", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.intelligence.io.solutions/api/v1", + "doc": "https://io.net/docs/guides/intelligence/io-intelligence", "env": [ - "XPERSONA_API_KEY" + "IOINTELLIGENCE_API_KEY" ], - "model_count": 1 + "model_count": 17 }, { - "id": "stepfun", + "id": "lilac", + "display_name": "Lilac", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.getlilac.com/v1", + "doc": "https://docs.getlilac.com/inference/models", + "env": [ + "LILAC_API_KEY" + ], + "model_count": 4 + }, + { + "id": "stepfun-ai", "display_name": "StepFun", "npm": "@ai-sdk/openai-compatible", + "api": "https://api.stepfun.ai/step_plan/v1", + "doc": "https://platform.stepfun.ai/docs/en/step-plan/integrations/open-code", + "env": [ + "STEPFUN_API_KEY" + ], + "model_count": 2 + }, + { + "id": "tencent-coding-plan", + "display_name": "Tencent Coding Plan (China)", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.lkeap.cloud.tencent.com/coding/v3", + "doc": "https://cloud.tencent.com/document/product/1772/128947", + "env": [ + "TENCENT_CODING_PLAN_API_KEY" + ], + "model_count": 8 + }, + { + "id": "opencode-go", + "display_name": "OpenCode Go", + "npm": "@ai-sdk/openai-compatible", + "api": "https://opencode.ai/zen/go/v1", + "doc": "https://opencode.ai/docs/zen", + "env": [ + "OPENCODE_API_KEY" + ], + "model_count": 16 + }, + { + "id": "cortecs", + "display_name": "Cortecs", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.cortecs.ai/v1", + "doc": "https://api.cortecs.ai/v1/models", + "env": [ + "CORTECS_API_KEY" + ], + "model_count": 49 + }, + { + "id": "auriko", + "display_name": "Auriko", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.auriko.ai/v1", + "doc": "https://docs.auriko.ai", + "env": [ + "AURIKO_API_KEY" + ], + "model_count": 15 + }, + { + "id": "wafer.ai", + "display_name": "Wafer", + "npm": "@ai-sdk/openai-compatible", + "api": "https://pass.wafer.ai/v1", + "doc": "https://docs.wafer.ai/wafer-pass", + "env": [ + "WAFER_API_KEY" + ], +<<<<<<< HEAD + "model_count": 4 +======= + "model_count": 7 +>>>>>>> upstream/main + }, + { + "id": "berget", + "display_name": "Berget.AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.berget.ai/v1", + "doc": "https://api.berget.ai", + "env": [ + "BERGET_API_KEY" + ], + "model_count": 7 + }, + { + "id": "requesty", + "display_name": "Requesty", + "npm": "@ai-sdk/openai-compatible", + "api": "https://router.requesty.ai/v1", + "doc": "https://requesty.ai/solution/llm-routing/models", + "env": [ + "REQUESTY_API_KEY" + ], + "model_count": 38 + }, + { + "id": "atomic-chat", + "display_name": "Atomic Chat", + "npm": "@ai-sdk/openai-compatible", + "api": "http://127.0.0.1:1337/v1", + "doc": "https://atomic.chat", + "env": [ + "ATOMIC_CHAT_API_KEY" + ], + "model_count": 5 + }, + { + "id": "stepfun", + "display_name": "StepFun (China)", + "npm": "@ai-sdk/openai-compatible", "api": "https://api.stepfun.com/v1", "doc": "https://platform.stepfun.com/docs/zh/overview/concept", "env": [ @@ -1037,70 +1136,247 @@ "model_count": 4 }, { - "id": "sarvam", - "display_name": "Sarvam AI", + "id": "vultr", + "display_name": "Vultr", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.sarvam.ai/v1", - "doc": "https://docs.sarvam.ai/api-reference-docs/getting-started/models", + "api": "https://api.vultrinference.com/v1", + "doc": "https://api.vultrinference.com/", "env": [ - "SARVAM_API_KEY" + "VULTR_API_KEY" ], - "model_count": 2 + "model_count": 7 }, { - "id": "zhipuai", - "display_name": "Zhipu AI", + "id": "zai-coding-plan", + "display_name": "Z.AI Coding Plan", "npm": "@ai-sdk/openai-compatible", - "api": "https://open.bigmodel.cn/api/paas/v4", + "api": "https://api.z.ai/api/coding/paas/v4", + "doc": "https://docs.z.ai/devpack/overview", + "env": [ + "ZHIPU_API_KEY" + ], + "model_count": 5 + }, + { + "id": "synthetic", + "display_name": "Synthetic", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.synthetic.new/openai/v1", + "doc": "https://synthetic.new/pricing", + "env": [ + "SYNTHETIC_API_KEY" + ], + "model_count": 33 + }, + { + "id": "cloudferro-sherlock", + "display_name": "CloudFerro Sherlock", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api-sherlock.cloudferro.com/openai/v1/", + "doc": "https://docs.sherlock.cloudferro.com/", + "env": [ + "CLOUDFERRO_SHERLOCK_API_KEY" + ], + "model_count": 5 + }, + { + "id": "helicone", + "display_name": "Helicone", + "npm": "@ai-sdk/openai-compatible", + "api": "https://ai-gateway.helicone.ai/v1", + "doc": "https://helicone.ai/models", + "env": [ + "HELICONE_API_KEY" + ], + "model_count": 90 + }, + { + "id": "zai", + "display_name": "Z.AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.z.ai/api/paas/v4", "doc": "https://docs.z.ai/guides/overview/pricing", "env": [ "ZHIPU_API_KEY" ], - "model_count": 12 + "model_count": 13 }, { - "id": "bailing", - "display_name": "Bailing", + "id": "nova", + "display_name": "Nova", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.tbox.cn/api/llm/v1/chat/completions", - "doc": "https://alipaytbox.yuque.com/sxs0ba/ling/intro", + "api": "https://api.nova.amazon.com/v1", + "doc": "https://nova.amazon.com/dev/documentation", "env": [ - "BAILING_API_TOKEN" + "NOVA_API_KEY" ], "model_count": 2 }, { - "id": "qihang-ai", - "display_name": "QiHang", + "id": "nearai", + "display_name": "NEAR AI Cloud", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.qhaigc.net/v1", - "doc": "https://www.qhaigc.net/docs", + "api": "https://cloud-api.near.ai/v1", + "doc": "https://docs.near.ai/", "env": [ - "QIHANG_API_KEY" + "NEARAI_API_KEY" ], - "model_count": 9 +<<<<<<< HEAD + "model_count": 12 +======= + "model_count": 37 +>>>>>>> upstream/main }, { - "id": "lilac", - "display_name": "Lilac", + "id": "inceptron", + "display_name": "Inceptron", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.getlilac.com/v1", - "doc": "https://docs.getlilac.com/inference/models", + "api": "https://api.inceptron.io/v1", + "doc": "https://docs.inceptron.io", "env": [ - "LILAC_API_KEY" + "INCEPTRON_API_KEY" + ], +<<<<<<< HEAD + "model_count": 50 + }, + { + "id": "302ai", + "display_name": "302.AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.302.ai/v1", + "doc": "https://doc.302.ai", + "env": [ + "302AI_API_KEY" ], + "model_count": 97 +======= "model_count": 4 +>>>>>>> upstream/main }, { - "id": "alibaba-cn", - "display_name": "Alibaba (China)", + "id": "xpersona", + "display_name": "Xpersona", "npm": "@ai-sdk/openai-compatible", - "api": "https://dashscope.aliyuncs.com/compatible-mode/v1", - "doc": "https://www.alibabacloud.com/help/en/model-studio/models", + "api": "https://www.xpersona.co/v1", + "doc": "https://www.xpersona.co/docs", "env": [ - "DASHSCOPE_API_KEY" + "XPERSONA_API_KEY" + ], + "model_count": 1 + }, + { + "id": "perplexity-agent", + "display_name": "Perplexity Agent", + "npm": "@ai-sdk/openai", + "api": "https://api.perplexity.ai/v1", + "doc": "https://docs.perplexity.ai/docs/agent-api/models", + "env": [ + "PERPLEXITY_API_KEY" ], + "model_count": 18 + }, + { + "id": "jiekou", + "display_name": "Jiekou.AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.jiekou.ai/openai", + "doc": "https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_models.dev", + "env": [ + "JIEKOU_API_KEY" + ], + "model_count": 61 + }, + { + "id": "abliteration-ai", + "display_name": "abliteration.ai", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.abliteration.ai/v1", + "doc": "https://docs.abliteration.ai/models", + "env": [ + "ABLIT_KEY" + ], + "model_count": 1 + }, + { + "id": "minimax-cn", + "display_name": "MiniMax (minimaxi.com)", + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimaxi.com/anthropic/v1", + "doc": "https://platform.minimaxi.com/docs/guides/quickstart", + "env": [ + "MINIMAX_API_KEY" + ], + "model_count": 6 + }, + { + "id": "qiniu-ai", + "display_name": "Qiniu", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.qnaigc.com/v1", + "doc": "https://developer.qiniu.com/aitokenapi", + "env": [ + "QINIU_API_KEY" + ], + "model_count": 91 + }, + { + "id": "morph", + "display_name": "Morph", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.morphllm.com/v1", + "doc": "https://docs.morphllm.com/api-reference/introduction", + "env": [ + "MORPH_API_KEY" + ], + "model_count": 3 + }, + { + "id": "xiaomi-token-plan-sgp", + "display_name": "Xiaomi Token Plan (Singapore)", + "npm": "@ai-sdk/openai-compatible", + "api": "https://token-plan-sgp.xiaomimimo.com/v1", + "doc": "https://platform.xiaomimimo.com/#/docs", + "env": [ + "XIAOMI_API_KEY" + ], +<<<<<<< HEAD "model_count": 82 +======= + "model_count": 8 + }, + { + "id": "fastrouter", + "display_name": "FastRouter", + "npm": "@ai-sdk/openai-compatible", + "api": "https://go.fastrouter.ai/api/v1", + "doc": "https://fastrouter.ai/models", + "env": [ + "FASTROUTER_API_KEY" + ], + "model_count": 15 + }, + { + "id": "siliconflow", + "display_name": "SiliconFlow", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.siliconflow.com/v1", + "doc": "https://cloud.siliconflow.com/models", + "env": [ + "SILICONFLOW_API_KEY" + ], + "model_count": 76 + }, + { + "id": "abacus", + "display_name": "Abacus", + "npm": "@ai-sdk/openai-compatible", + "api": "https://routellm.abacus.ai/v1", + "doc": "https://abacus.ai/help/api", + "env": [ + "ABACUS_API_KEY" + ], + "model_count": 65 +>>>>>>> upstream/main }, { "id": "drun", @@ -1114,48 +1390,92 @@ "model_count": 3 }, { - "id": "huggingface", - "display_name": "Hugging Face", + "id": "wandb", + "display_name": "Weights & Biases", "npm": "@ai-sdk/openai-compatible", - "api": "https://router.huggingface.co/v1", - "doc": "https://huggingface.co/docs/inference-providers", + "api": "https://api.inference.wandb.ai/v1", + "doc": "https://docs.wandb.ai/guides/integrations/inference/", "env": [ - "HF_TOKEN" + "WANDB_API_KEY" ], - "model_count": 24 + "model_count": 18 }, { - "id": "umans-ai-coding-plan", - "display_name": "Umans AI Coding Plan", + "id": "meganova", + "display_name": "Meganova", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.code.umans.ai/v1", - "doc": "https://app.umans.ai/offers/code/docs", + "api": "https://api.meganova.ai/v1", + "doc": "https://docs.meganova.ai", "env": [ - "UMANS_AI_CODING_PLAN_API_KEY" + "MEGANOVA_API_KEY" ], - "model_count": 5 + "model_count": 19 }, { - "id": "tencent-tokenhub", - "display_name": "Tencent TokenHub", + "id": "opencode", + "display_name": "OpenCode Zen", "npm": "@ai-sdk/openai-compatible", - "api": "https://tokenhub.tencentmaas.com/v1", - "doc": "https://cloud.tencent.com/document/product/1823/130050", + "api": "https://opencode.ai/zen/v1", + "doc": "https://opencode.ai/docs/zen", "env": [ - "TENCENT_TOKENHUB_API_KEY" + "OPENCODE_API_KEY" ], - "model_count": 1 + "model_count": 66 }, { - "id": "nebius", - "display_name": "Nebius Token Factory", + "id": "poolside", + "display_name": "Poolside", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.tokenfactory.nebius.com/v1", - "doc": "https://docs.tokenfactory.nebius.com/", + "api": "https://inference.poolside.ai/v1", + "doc": "https://platform.poolside.ai", "env": [ - "NEBIUS_API_KEY" + "POOLSIDE_API_KEY" ], - "model_count": 31 + "model_count": 2 + }, + { + "id": "sarvam", + "display_name": "Sarvam AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.sarvam.ai/v1", + "doc": "https://docs.sarvam.ai/api-reference-docs/getting-started/models", + "env": [ + "SARVAM_API_KEY" + ], + "model_count": 2 + }, + { + "id": "baseten", + "display_name": "Baseten", + "npm": "@ai-sdk/openai-compatible", + "api": "https://inference.baseten.co/v1", + "doc": "https://docs.baseten.co/development/model-apis/overview", + "env": [ + "BASETEN_API_KEY" + ], + "model_count": 14 + }, + { + "id": "lucidquery", + "display_name": "LucidQuery AI", + "npm": "@ai-sdk/openai-compatible", + "api": "https://lucidquery.com/api/v1", + "doc": "https://lucidquery.com/api/docs", + "env": [ + "LUCIDQUERY_API_KEY" + ], + "model_count": 2 + }, + { + "id": "scaleway", + "display_name": "Scaleway", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.scaleway.ai/v1", + "doc": "https://www.scaleway.com/en/docs/generative-apis/", + "env": [ + "SCALEWAY_API_KEY" + ], + "model_count": 16 }, { "id": "hpc-ai", @@ -1169,25 +1489,26 @@ "model_count": 3 }, { - "id": "xiaomi", - "display_name": "Xiaomi", + "id": "tencent-tokenhub", + "display_name": "Tencent TokenHub", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.xiaomimimo.com/v1", - "doc": "https://platform.xiaomimimo.com/#/docs", + "api": "https://tokenhub.tencentmaas.com/v1", + "doc": "https://cloud.tencent.com/document/product/1823/130050", "env": [ - "XIAOMI_API_KEY" + "TENCENT_TOKENHUB_API_KEY" ], - "model_count": 5 + "model_count": 1 }, { - "id": "github-copilot", - "display_name": "GitHub Copilot", + "id": "alibaba-coding-plan-cn", + "display_name": "Alibaba Coding Plan (China)", "npm": "@ai-sdk/openai-compatible", - "api": "https://api.githubcopilot.com", - "doc": "https://docs.github.com/en/copilot", + "api": "https://coding.dashscope.aliyuncs.com/v1", + "doc": "https://help.aliyun.com/zh/model-studio/coding-plan", "env": [ - "GITHUB_TOKEN" + "ALIBABA_CODING_PLAN_API_KEY" ], +<<<<<<< HEAD "model_count": 28 }, { @@ -1200,16 +1521,21 @@ "STEPFUN_API_KEY" ], "model_count": 2 +======= + "model_count": 11 +>>>>>>> upstream/main }, { - "id": "inference", - "display_name": "Inference", + "id": "cloudflare-workers-ai", + "display_name": "Cloudflare Workers AI", "npm": "@ai-sdk/openai-compatible", - "api": "https://inference.net/v1", - "doc": "https://inference.net/models", + "api": "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1", + "doc": "https://developers.cloudflare.com/workers-ai/models/", "env": [ - "INFERENCE_API_KEY" + "CLOUDFLARE_ACCOUNT_ID", + "CLOUDFLARE_API_KEY" ], +<<<<<<< HEAD "model_count": 9 }, { @@ -1222,5 +1548,41 @@ "POOLSIDE_API_KEY" ], "model_count": 2 +======= + "model_count": 20 + }, + { + "id": "nebius", + "display_name": "Nebius Token Factory", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.tokenfactory.nebius.com/v1", + "doc": "https://docs.tokenfactory.nebius.com/", + "env": [ + "NEBIUS_API_KEY" + ], + "model_count": 31 + }, + { + "id": "minimax", + "display_name": "MiniMax (minimax.io)", + "npm": "@ai-sdk/anthropic", + "api": "https://api.minimax.io/anthropic/v1", + "doc": "https://platform.minimax.io/docs/guides/quickstart", + "env": [ + "MINIMAX_API_KEY" + ], + "model_count": 6 + }, + { + "id": "meta-llama", + "display_name": "Llama", + "npm": "@ai-sdk/openai-compatible", + "api": "https://api.llama.com/compat/v1/", + "doc": "https://llama.developer.meta.com/docs/models", + "env": [ + "LLAMA_API_KEY" + ], + "model_count": 7 +>>>>>>> upstream/main } ] \ No newline at end of file diff --git a/ui/desktop/src/components/BaseChat.tsx b/ui/desktop/src/components/BaseChat.tsx index f6a36faa6ae9..be7df73d2e33 100644 --- a/ui/desktop/src/components/BaseChat.tsx +++ b/ui/desktop/src/components/BaseChat.tsx @@ -132,7 +132,10 @@ export default function BaseChat({ }, [initialMessage, recipe?.prompt, session?.user_recipe_values]); const canAutoSubmit = - !recipe || !RECIPE_TRUST_WARNINGS_ENABLED || hasNotAcceptedRecipe === false; + session?.session_type === 'scheduled' || + !recipe || + !RECIPE_TRUST_WARNINGS_ENABLED || + hasNotAcceptedRecipe === false; useAutoSubmit({ sessionId, @@ -215,7 +218,7 @@ export default function BaseChat({ return; } - if (!recipe || !isActiveSession) return; + if (!recipe || !isActiveSession || session?.session_type === 'scheduled') return; (async () => { const accepted = await window.electron.hasAcceptedRecipeBefore(recipe); @@ -226,7 +229,7 @@ export default function BaseChat({ setHasRecipeSecurityWarnings(scanResult.has_security_warnings); } })(); - }, [recipe, isActiveSession]); + }, [recipe, isActiveSession, session?.session_type]); const handleRecipeAccept = async (accept: boolean) => { if (recipe && accept) { @@ -528,7 +531,10 @@ export default function BaseChat({ - {RECIPE_TRUST_WARNINGS_ENABLED && recipe && isActiveSession && ( + {RECIPE_TRUST_WARNINGS_ENABLED && + recipe && + isActiveSession && + session?.session_type !== 'scheduled' && ( handleRecipeAccept(true)} @@ -542,7 +548,10 @@ export default function BaseChat({ /> )} - {recipe?.parameters && recipe.parameters.length > 0 && !session?.user_recipe_values && ( + {recipe?.parameters && + recipe.parameters.length > 0 && + !session?.user_recipe_values && + session?.session_type !== 'scheduled' && ( { + if (session.session_type === 'scheduled') { + return false; + } + const recipe = session.recipe; return recipe?.parameters && recipe.parameters.length > 0 && !session.user_recipe_values; }, []);