Upgrade default Claude Opus model to 4.8

Bump the default Opus route/model from claude-opus-4-7 to claude-opus-4-8
across provider presets (claude, claudeDesktop, hermes, openclaw, opencode,
universal), i18n locales (zh/en/ja/zh-TW), pricing seed data, and the
user-manual docs.

- Add claude-opus-4-8 pricing row ($5/$25/$0.50/$6.25); keep the 4-7 row
  for historical usage stats (seeded via INSERT OR IGNORE).
- Claude Desktop proxy: accept bidirectional opus 4-7 <-> 4-8 route alias
  during rollout so previously saved routes keep resolving.
- thinking_optimizer: route opus-4-8 through adaptive thinking and normalize
  dotted model ids (also fixes dotted 4-6/4-7 falling back to legacy).
- usage_stats: normalize Bedrock/Vertex/aggregator opus-4-8 ids to base
  pricing.

Also merge role:"system" messages into the Gemini systemInstruction in the
Anthropic->Gemini transform.
This commit is contained in:
Jason
2026-05-29 12:09:33 +08:00
parent 554e3b4875
commit 0877b9e35d
27 changed files with 386 additions and 221 deletions
+2
View File
@@ -243,6 +243,8 @@ CC Switch includes preset official prices for common models (per million tokens)
| Model | Input | Output | Cache Read | Cache Creation |
|-------|-------|--------|------------|----------------|
| **Claude 4.8 Series** | | | | |
| claude-opus-4-8 | $5 | $25 | $0.50 | $6.25 |
| **Claude 4.5 Series** | | | | |
| claude-opus-4-5 | $5 | $25 | $0.50 | $6.25 |
| claude-sonnet-4-5 | $3 | $15 | $0.30 | $3.75 |
+2
View File
@@ -243,6 +243,8 @@ CC Switch は一般的なモデルの公式価格(100 万 Token あたり)
| モデル | 入力 | 出力 | キャッシュ読取 | キャッシュ作成 |
|------|------|------|----------|----------|
| **Claude 4.8 シリーズ** | | | | |
| claude-opus-4-8 | $5 | $25 | $0.50 | $6.25 |
| **Claude 4.5 シリーズ** | | | | |
| claude-opus-4-5 | $5 | $25 | $0.50 | $6.25 |
| claude-sonnet-4-5 | $3 | $15 | $0.30 | $3.75 |
+2
View File
@@ -243,6 +243,8 @@ CC Switch 预设了常用模型的官方价格(每百万 Token)。v3.13.0
| 模型 | 输入 | 输出 | 缓存读取 | 缓存创建 |
|------|------|------|----------|----------|
| **Claude 4.8 系列** | | | | |
| claude-opus-4-8 | $5 | $25 | $0.50 | $6.25 |
| **Claude 4.5 系列** | | | | |
| claude-opus-4-5 | $5 | $25 | $0.50 | $6.25 |
| claude-sonnet-4-5 | $3 | $15 | $0.30 | $3.75 |
+67 -6
View File
@@ -32,6 +32,9 @@ pub const ANTHROPIC_CLAUDE_ROUTE_PREFIX: &str = "anthropic/claude-";
/// Claude Desktop schema 不接受此后缀,import 边界翻译为 `supports1m` 字段。
pub const ONE_M_CONTEXT_MARKER: &str = "[1m]";
const CURRENT_OPUS_ROUTE_ID: &str = "claude-opus-4-8";
const LEGACY_OPUS_ROUTE_ID: &str = "claude-opus-4-7";
const NON_ANTHROPIC_ROUTE_MARKERS: &[&str] = &[
"ark-code",
"astron",
@@ -87,7 +90,7 @@ pub const DEFAULT_PROXY_ROUTES: &[ClaudeDesktopDefaultRoute] = &[
supports_1m: true,
},
ClaudeDesktopDefaultRoute {
route_id: "claude-opus-4-7",
route_id: CURRENT_OPUS_ROUTE_ID,
env_key: "ANTHROPIC_DEFAULT_OPUS_MODEL",
supports_1m: true,
},
@@ -710,7 +713,11 @@ pub fn map_proxy_request_model(mut body: Value, provider: &Provider) -> Result<V
})?;
let routes = proxy_model_routes(provider)?;
let route = routes.iter().find(|r| r.route_id == requested);
let route = routes.iter().find(|r| r.route_id == requested).or_else(|| {
routes
.iter()
.find(|r| is_compatible_opus_route_alias(&r.route_id, &requested))
});
let Some(route) = route else {
return Err(AppError::localized(
"claude_desktop.provider.route_unknown",
@@ -726,6 +733,14 @@ pub fn map_proxy_request_model(mut body: Value, provider: &Provider) -> Result<V
Ok(body)
}
fn is_compatible_opus_route_alias(route_id: &str, requested: &str) -> bool {
matches!(
(route_id, requested),
(CURRENT_OPUS_ROUTE_ID, LEGACY_OPUS_ROUTE_ID)
| (LEGACY_OPUS_ROUTE_ID, CURRENT_OPUS_ROUTE_ID)
)
}
fn should_normalize_mimo_anthropic_thinking_history(
provider: &Provider,
upstream_model: &str,
@@ -1520,9 +1535,55 @@ mod tests {
assert_eq!(models["data"][0]["id"], json!("claude-sonnet-4-6"));
assert_eq!(models["data"][0]["supports1m"], json!(true));
let err = map_proxy_request_model(json!({"model": "claude-opus-4-7"}), &provider)
let err = map_proxy_request_model(json!({"model": "claude-opus-4-8"}), &provider)
.expect_err("unknown route should fail");
assert!(err.to_string().contains("claude-opus-4-7"));
assert!(err.to_string().contains("claude-opus-4-8"));
}
#[test]
fn claude_desktop_proxy_accepts_opus_4_7_4_8_alias_during_rollout() {
let mut provider = proxy_provider("proxy");
let current_routes = std::collections::HashMap::from([(
"claude-opus-4-8".to_string(),
ClaudeDesktopModelRoute {
model: "upstream-opus-new".to_string(),
label_override: None,
supports_1m: Some(true),
},
)]);
provider
.meta
.as_mut()
.expect("meta")
.claude_desktop_model_routes = current_routes;
let mapped = map_proxy_request_model(
json!({"model": "claude-opus-4-7", "messages": []}),
&provider,
)
.expect("legacy Opus route should map to current route");
assert_eq!(mapped["model"], json!("upstream-opus-new"));
let legacy_routes = std::collections::HashMap::from([(
"claude-opus-4-7".to_string(),
ClaudeDesktopModelRoute {
model: "upstream-opus-legacy".to_string(),
label_override: None,
supports_1m: Some(true),
},
)]);
provider
.meta
.as_mut()
.expect("meta")
.claude_desktop_model_routes = legacy_routes;
let mapped = map_proxy_request_model(
json!({"model": "claude-opus-4-8", "messages": []}),
&provider,
)
.expect("current Opus route should map to legacy saved route");
assert_eq!(mapped["model"], json!("upstream-opus-legacy"));
}
#[test]
@@ -1652,12 +1713,12 @@ mod tests {
.iter()
.find(|route| route.upstream_model == "deepseek-v4-pro")
.expect("repaired route");
assert_eq!(repaired.route_id, "claude-opus-4-7");
assert_eq!(repaired.route_id, "claude-opus-4-8");
assert_eq!(repaired.label_override.as_deref(), Some("deepseek-v4-pro"));
assert!(repaired.supports_1m);
let mapped = map_proxy_request_model(
json!({"model": "claude-opus-4-7", "messages": []}),
json!({"model": "claude-opus-4-8", "messages": []}),
&provider,
)
.expect("map repaired route");
+1 -1
View File
@@ -907,7 +907,7 @@ mod import_claude_desktop_tests {
let routes = suggested_claude_desktop_routes(&p).expect("routes built");
assert_eq!(routes.len(), 3);
assert_eq!(routes.get("claude-sonnet-4-6").unwrap().model, "GLM-4.6");
assert_eq!(routes.get("claude-opus-4-7").unwrap().model, "GLM-4-Air");
assert_eq!(routes.get("claude-opus-4-8").unwrap().model, "GLM-4-Air");
assert_eq!(routes.get("claude-haiku-4-5").unwrap().model, "GLM-4-Flash");
assert_eq!(
routes
+9
View File
@@ -1205,6 +1205,15 @@ impl Database {
/// 注意: model_id 使用短横线格式(如 claude-haiku-4-5),与 API 返回的模型名称标准化后一致
fn seed_model_pricing(conn: &Connection) -> Result<(), AppError> {
let pricing_data = [
// Claude 4.8 系列
(
"claude-opus-4-8",
"Claude Opus 4.8",
"5",
"25",
"0.50",
"6.25",
),
// Claude 4.7 系列
(
"claude-opus-4-7",
+2 -2
View File
@@ -805,7 +805,7 @@ mod tests {
name: Some("MyHermes".to_string()),
endpoint: Some("https://api.example.com/v1".to_string()),
api_key: Some("sk-test".to_string()),
model: Some("anthropic/claude-opus-4-7".to_string()),
model: Some("anthropic/claude-opus-4-8".to_string()),
..Default::default()
}
}
@@ -827,7 +827,7 @@ mod tests {
// models array with the deeplink model id
let models = obj.get("models").unwrap().as_array().unwrap();
assert_eq!(models.len(), 1);
assert_eq!(models[0]["id"], "anthropic/claude-opus-4-7");
assert_eq!(models[0]["id"], "anthropic/claude-opus-4-8");
}
#[test]
+8 -8
View File
@@ -7,7 +7,7 @@
//!
//! ```yaml
//! model:
//! default: "anthropic/claude-opus-4-7"
//! default: "anthropic/claude-opus-4-8"
//! provider: "openrouter"
//! base_url: "https://openrouter.ai/api/v1"
//!
@@ -19,9 +19,9 @@
//! - name: openrouter
//! base_url: https://openrouter.ai/api/v1
//! api_key: sk-or-...
//! model: anthropic/claude-opus-4-7
//! model: anthropic/claude-opus-4-8
//! models:
//! anthropic/claude-opus-4-7:
//! anthropic/claude-opus-4-8:
//! context_length: 200000
//!
//! mcp_servers:
@@ -185,7 +185,7 @@ fn find_yaml_section_range(raw: &str, section_key: &str) -> Option<(usize, usize
///
/// ```yaml
/// model:
/// default: "anthropic/claude-opus-4-7"
/// default: "anthropic/claude-opus-4-8"
/// provider: "openrouter"
/// ```
fn serialize_yaml_section(key: &str, value: &serde_yaml::Value) -> Result<String, AppError> {
@@ -1219,7 +1219,7 @@ agent:
let mut m = serde_yaml::Mapping::new();
m.insert(
serde_yaml::Value::String("default".to_string()),
serde_yaml::Value::String("claude-opus-4-7".to_string()),
serde_yaml::Value::String("claude-opus-4-8".to_string()),
);
m.insert(
serde_yaml::Value::String("provider".to_string()),
@@ -1233,7 +1233,7 @@ agent:
assert!(result.contains("agent:"));
assert!(result.contains("max_turns"));
// And the model section should be updated
assert!(result.contains("claude-opus-4-7"));
assert!(result.contains("claude-opus-4-8"));
assert!(result.contains("anthropic"));
assert!(!result.contains("gpt-4"));
assert!(!result.contains("openai"));
@@ -1517,7 +1517,7 @@ custom_providers:
assert!(get_model_config().unwrap().is_none());
let model = HermesModelConfig {
default: Some("anthropic/claude-opus-4-7".to_string()),
default: Some("anthropic/claude-opus-4-8".to_string()),
provider: Some("openrouter".to_string()),
base_url: Some("https://openrouter.ai/api/v1".to_string()),
context_length: Some(200000),
@@ -1529,7 +1529,7 @@ custom_providers:
let read_model = get_model_config().unwrap().unwrap();
assert_eq!(
read_model.default.as_deref(),
Some("anthropic/claude-opus-4-7")
Some("anthropic/claude-opus-4-8")
);
assert_eq!(read_model.provider.as_deref(), Some("openrouter"));
assert_eq!(read_model.context_length, Some(200000));
@@ -324,14 +324,14 @@ mod tests {
#[test]
fn resolve_falls_back_to_highest_family_version() {
// 用户请求 opus 4.7 但 Copilot 账号只有 opus 4.6
// 用户请求 opus 4.8 但 Copilot 账号只有 opus 4.6
let models = vec![
model("claude-opus-4.5"),
model("claude-opus-4.6"),
model("claude-sonnet-4.6"),
];
assert_eq!(
resolve_against_models("claude-opus-4.7", &models),
resolve_against_models("claude-opus-4.8", &models),
Some("claude-opus-4.6".to_string())
);
}
@@ -57,11 +57,17 @@ pub fn anthropic_to_gemini_with_shadow(
.map(|snapshot| snapshot.turns)
.unwrap_or_default();
if let Some(system) = build_system_instruction(body.get("system"))? {
let messages = body.get("messages").and_then(|value| value.as_array());
let system_instruction = build_system_instruction(
body.get("system"),
messages.map(|messages| messages.as_slice()),
)?;
if let Some(system) = system_instruction {
result["systemInstruction"] = system;
}
if let Some(messages) = body.get("messages").and_then(|value| value.as_array()) {
if let Some(messages) = messages {
result["contents"] = json!(convert_messages_to_contents(messages, &shadow_turns)?);
}
@@ -269,31 +275,26 @@ pub fn extract_gemini_model(body: &Value) -> Option<&str> {
body.get("model").and_then(|value| value.as_str())
}
fn build_system_instruction(system: Option<&Value>) -> Result<Option<Value>, ProxyError> {
let Some(system) = system else {
return Ok(None);
};
fn build_system_instruction(
system: Option<&Value>,
messages: Option<&[Value]>,
) -> Result<Option<Value>, ProxyError> {
let mut texts = Vec::new();
if let Some(text) = system.as_str() {
if text.is_empty() {
return Ok(None);
}
return Ok(Some(json!({
"parts": [{ "text": text }]
})));
if let Some(system) = system {
collect_system_texts(system, &mut texts)?;
}
let Some(blocks) = system.as_array() else {
return Err(ProxyError::TransformError(
"Anthropic system must be a string or an array".to_string(),
));
};
let texts: Vec<&str> = blocks
.iter()
.filter_map(|block| block.get("text").and_then(|value| value.as_str()))
.filter(|text| !text.is_empty())
.collect();
if let Some(messages) = messages {
for message in messages {
if message.get("role").and_then(|value| value.as_str()) != Some("system") {
continue;
}
if let Some(content) = message.get("content") {
collect_system_texts(content, &mut texts)?;
}
}
}
if texts.is_empty() {
return Ok(None);
@@ -304,6 +305,31 @@ fn build_system_instruction(system: Option<&Value>) -> Result<Option<Value>, Pro
})))
}
fn collect_system_texts(value: &Value, texts: &mut Vec<String>) -> Result<(), ProxyError> {
if let Some(text) = value.as_str() {
if !text.is_empty() {
texts.push(text.to_string());
}
return Ok(());
}
let Some(blocks) = value.as_array() else {
return Err(ProxyError::TransformError(
"Anthropic system must be a string or an array".to_string(),
));
};
texts.extend(
blocks
.iter()
.filter_map(|block| block.get("text").and_then(|value| value.as_str()))
.filter(|text| !text.is_empty())
.map(ToString::to_string),
);
Ok(())
}
fn build_generation_config(body: &Value) -> Option<Value> {
let mut config = Map::new();
@@ -383,6 +409,9 @@ fn convert_messages_to_contents(
.get("role")
.and_then(|value| value.as_str())
.unwrap_or("user");
if role == "system" {
continue;
}
let gemini_role = if role == "assistant" { "model" } else { "user" };
@@ -1149,6 +1178,32 @@ mod tests {
assert_eq!(result["generationConfig"]["maxOutputTokens"], 128);
}
#[test]
fn anthropic_to_gemini_merges_system_messages_into_system_instruction() {
let input = json!({
"model": "gemini-3-pro",
"system": [{ "type": "text", "text": "Top level system." }],
"messages": [
{ "role": "system", "content": "Message system." },
{
"role": "system",
"content": [{ "type": "text", "text": "Block system." }]
},
{ "role": "user", "content": "Hello" }
]
});
let result = anthropic_to_gemini(input).unwrap();
assert_eq!(
result["systemInstruction"]["parts"][0]["text"],
"Top level system.\n\nMessage system.\n\nBlock system."
);
assert_eq!(result["contents"].as_array().unwrap().len(), 1);
assert_eq!(result["contents"][0]["role"], "user");
assert_eq!(result["contents"][0]["parts"][0]["text"], "Hello");
}
#[test]
fn anthropic_to_gemini_maps_tools_and_tool_results() {
let input = json!({
+27 -2
View File
@@ -7,7 +7,7 @@ use serde_json::{json, Value};
///
/// 三路径分发:
/// - skip: haiku 模型直接跳过
/// - adaptive: opus-4-7 / opus-4-6 / sonnet-4-6 使用 adaptive thinking
/// - adaptive: opus-4-8 / opus-4-7 / opus-4-6 / sonnet-4-6 使用 adaptive thinking
/// - legacy: 其他模型注入 enabled thinking + budget_tokens
pub fn optimize(body: &mut Value, config: &OptimizerConfig) {
if !config.thinking_optimizer {
@@ -24,7 +24,7 @@ pub fn optimize(body: &mut Value, config: &OptimizerConfig) {
return;
}
if model.contains("opus-4-7") || model.contains("opus-4-6") || model.contains("sonnet-4-6") {
if uses_adaptive_thinking(&model) {
log::info!("[OPT] thinking: adaptive({model})");
body["thinking"] = json!({"type": "adaptive"});
body["output_config"] = json!({"effort": "max"});
@@ -73,6 +73,13 @@ pub fn optimize(body: &mut Value, config: &OptimizerConfig) {
}
}
fn uses_adaptive_thinking(model: &str) -> bool {
let normalized = model.replace('.', "-");
["opus-4-8", "opus-4-7", "opus-4-6", "sonnet-4-6"]
.iter()
.any(|needle| normalized.contains(needle))
}
/// 追加 beta 标识到 anthropic_beta 数组(去重)
fn append_beta(body: &mut Value, beta: &str) {
match body.get_mut("anthropic_beta") {
@@ -114,6 +121,24 @@ mod tests {
}
}
#[test]
fn test_adaptive_opus_4_8() {
let mut body = json!({
"model": "anthropic/claude-opus-4.8",
"max_tokens": 16384,
"thinking": {"type": "enabled", "budget_tokens": 8000},
"messages": [{"role": "user", "content": "hello"}]
});
optimize(&mut body, &enabled_config());
assert_eq!(body["thinking"]["type"], "adaptive");
assert!(body["thinking"].get("budget_tokens").is_none());
assert_eq!(body["output_config"]["effort"], "max");
let betas = body["anthropic_beta"].as_array().unwrap();
assert!(betas.iter().any(|v| v == "context-1m-2025-08-07"));
}
#[test]
fn test_adaptive_opus_4_6() {
let mut body = json!({
+4 -4
View File
@@ -41,7 +41,7 @@ const CLAUDE_MODEL_OVERRIDE_ENV_KEYS: [&str; 9] = [
const CLAUDE_TAKEOVER_HAIKU_MODEL: &str = "claude-haiku-4-5";
const CLAUDE_TAKEOVER_SONNET_MODEL: &str = "claude-sonnet-4-6";
const CLAUDE_TAKEOVER_OPUS_MODEL: &str = "claude-opus-4-7";
const CLAUDE_TAKEOVER_OPUS_MODEL: &str = "claude-opus-4-8";
// 写给 Claude Code 时沿用文档示例的大写形式;解析侧大小写不敏感。
const CLAUDE_ONE_M_MARKER_FOR_CLIENT: &str = "[1M]";
@@ -2451,7 +2451,7 @@ mod tests {
"ANTHROPIC_DEFAULT_SONNET_MODEL_NAME",
Some("claude-sonnet-4.6"),
);
assert_env_str(env, "ANTHROPIC_DEFAULT_OPUS_MODEL", Some("claude-opus-4-7"));
assert_env_str(env, "ANTHROPIC_DEFAULT_OPUS_MODEL", Some("claude-opus-4-8"));
assert_env_str(
env,
"ANTHROPIC_DEFAULT_OPUS_MODEL_NAME",
@@ -2522,7 +2522,7 @@ mod tests {
Some("claude-sonnet-4-6"),
);
assert_env_str(env, "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", Some("gpt-5.4"));
assert_env_str(env, "ANTHROPIC_DEFAULT_OPUS_MODEL", Some("claude-opus-4-7"));
assert_env_str(env, "ANTHROPIC_DEFAULT_OPUS_MODEL", Some("claude-opus-4-8"));
assert_env_str(env, "ANTHROPIC_DEFAULT_OPUS_MODEL_NAME", Some("gpt-5.4"));
assert_env_str(env, "ANTHROPIC_API_KEY", Some(PROXY_TOKEN_PLACEHOLDER));
assert_env_str(env, "ANTHROPIC_AUTH_TOKEN", None);
@@ -3170,7 +3170,7 @@ model = "gpt-5.1-codex"
live_env
.get("ANTHROPIC_DEFAULT_OPUS_MODEL")
.and_then(|v| v.as_str()),
Some("claude-opus-4-7[1M]"),
Some("claude-opus-4-8[1M]"),
"Opus role should preserve the current provider 1M capability marker"
);
assert_eq!(
+15
View File
@@ -3214,6 +3214,11 @@ mod tests {
result.is_some(),
"Claude Desktop 短路由 claude-haiku-4-5 应能匹配到 claude-haiku-4-5-20251001"
);
let result = find_model_pricing_row(&conn, "anthropic/claude-opus-4.8")?;
assert!(
result.is_some(),
"聚合商点号格式 anthropic/claude-opus-4.8 应能匹配到 claude-opus-4-8"
);
// Claude Desktop 旧版/异常包装的非 Anthropic routeclaude-gpt-5.5 → gpt-5.5
let result = find_model_pricing_row(&conn, "claude-gpt-5.5")?;
@@ -3229,6 +3234,16 @@ mod tests {
result.is_some(),
"Bedrock/Vertex 风格 Claude 模型 ID 应能归一化到基础 Claude 模型定价"
);
let result = find_model_pricing_row(&conn, "global.anthropic.claude-opus-4-8-v1:0")?;
assert!(
result.is_some(),
"Bedrock 风格 Claude Opus 4.8 模型 ID 应能归一化到基础 Claude 模型定价"
);
let result = find_model_pricing_row(&conn, "claude-opus-4-8@20260527")?;
assert!(
result.is_some(),
"Vertex 风格 Claude Opus 4.8 模型 ID 应能归一化到基础 Claude 模型定价"
);
// Reasoning effort 后缀:没有专门价格时回退到基础模型
let result = find_model_pricing_row(&conn, "gpt-5.4@low")?;
@@ -415,7 +415,7 @@ export function HermesFormFields({
handleModelChange(index, "id", e.target.value)
}
placeholder={t("hermes.form.modelIdPlaceholder", {
defaultValue: "anthropic/claude-opus-4-7",
defaultValue: "anthropic/claude-opus-4-8",
})}
className="flex-1"
/>
@@ -471,7 +471,7 @@ export function HermesFormFields({
handleModelChange(index, "name", e.target.value)
}
placeholder={t("hermes.form.modelNamePlaceholder", {
defaultValue: "Claude Opus 4.7",
defaultValue: "Claude Opus 4.8",
})}
/>
</div>
+4 -4
View File
@@ -31,7 +31,7 @@ export interface ClaudeDesktopRoutePreset {
*/
export const CLAUDE_DESKTOP_ROLE_ROUTE_IDS = {
sonnet: "claude-sonnet-4-6",
opus: "claude-opus-4-7",
opus: "claude-opus-4-8",
haiku: "claude-haiku-4-5",
} as const;
@@ -160,7 +160,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-4.6",
"anthropic/claude-opus-4.7",
"anthropic/claude-opus-4.8",
"anthropic/claude-haiku-4.5",
),
isPartner: true,
@@ -888,7 +888,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-4.6",
"anthropic/claude-opus-4.7",
"anthropic/claude-opus-4.8",
"anthropic/claude-haiku-4.5",
true,
),
@@ -905,7 +905,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-4.6",
"anthropic/claude-opus-4.7",
"anthropic/claude-opus-4.8",
"anthropic/claude-haiku-4.5",
true,
),
+9 -9
View File
@@ -101,7 +101,7 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8",
},
},
category: "aggregator",
@@ -975,7 +975,7 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8",
},
},
category: "aggregator",
@@ -994,7 +994,7 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-4.6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-4.8",
},
},
category: "aggregator",
@@ -1102,10 +1102,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://cc-api.pipellm.ai",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "claude-opus-4-7",
ANTHROPIC_MODEL: "claude-opus-4-8",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-haiku-4-5-20251001",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-sonnet-4-6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-4-7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-4-8",
},
includeCoAuthoredBy: false,
},
@@ -1158,11 +1158,11 @@ export const providerPresets: ProviderPreset[] = [
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}",
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}",
AWS_REGION: "${AWS_REGION}",
ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-7",
ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-8",
ANTHROPIC_DEFAULT_HAIKU_MODEL:
"global.anthropic.claude-haiku-4-5-20251001-v1:0",
ANTHROPIC_DEFAULT_SONNET_MODEL: "global.anthropic.claude-sonnet-4-6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-8",
CLAUDE_CODE_USE_BEDROCK: "1",
},
},
@@ -1196,11 +1196,11 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_BASE_URL:
"https://bedrock-runtime.${AWS_REGION}.amazonaws.com",
AWS_REGION: "${AWS_REGION}",
ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-7",
ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-8",
ANTHROPIC_DEFAULT_HAIKU_MODEL:
"global.anthropic.claude-haiku-4-5-20251001-v1:0",
ANTHROPIC_DEFAULT_SONNET_MODEL: "global.anthropic.claude-sonnet-4-6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-8",
CLAUDE_CODE_USE_BEDROCK: "1",
},
},
+31 -31
View File
@@ -35,7 +35,7 @@ export function isHermesReadOnlyProvider(settingsConfig: unknown): boolean {
*
* ```yaml
* models:
* anthropic/claude-opus-4-7:
* anthropic/claude-opus-4-8:
* context_length: 200000
* ```
*
@@ -250,8 +250,8 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_mode: "chat_completions",
models: [
{
id: "anthropic/claude-opus-4-7",
name: "Claude Opus 4.7",
id: "anthropic/claude-opus-4-8",
name: "Claude Opus 4.8",
context_length: 1000000,
},
{
@@ -280,7 +280,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "openrouter",
iconColor: "#6366F1",
suggestedDefaults: {
model: { default: "anthropic/claude-opus-4-7", provider: "openrouter" },
model: { default: "anthropic/claude-opus-4-8", provider: "openrouter" },
},
},
{
@@ -733,7 +733,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -743,7 +743,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
partnerPromotionKey: "packycode",
icon: "packycode",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "packycode" },
model: { default: "claude-opus-4-8", provider: "packycode" },
},
},
{
@@ -757,8 +757,8 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_mode: "anthropic_messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
context_length: 1000000,
},
{
@@ -778,7 +778,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
partnerPromotionKey: "apikeyfun",
icon: "apikeyfun",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "apikeyfun" },
model: { default: "claude-opus-4-8", provider: "apikeyfun" },
},
},
{
@@ -863,7 +863,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -874,7 +874,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "cubence",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "cubence" },
model: { default: "claude-opus-4-8", provider: "cubence" },
},
},
{
@@ -887,7 +887,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
],
@@ -917,7 +917,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
],
@@ -947,7 +947,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -958,7 +958,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "aigocode",
iconColor: "#5B7FFF",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "aigocode" },
model: { default: "claude-opus-4-8", provider: "aigocode" },
},
},
{
@@ -971,7 +971,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -982,7 +982,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "rc",
iconColor: "#E96B2C",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "rightcode" },
model: { default: "claude-opus-4-8", provider: "rightcode" },
},
},
{
@@ -995,7 +995,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1006,7 +1006,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "aicodemirror",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "aicodemirror" },
model: { default: "claude-opus-4-8", provider: "aicodemirror" },
},
},
{
@@ -1019,7 +1019,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1030,7 +1030,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "crazyrouter",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "crazyrouter" },
model: { default: "claude-opus-4-8", provider: "crazyrouter" },
},
},
{
@@ -1043,7 +1043,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1054,7 +1054,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "sssaicode",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "sssaicode" },
model: { default: "claude-opus-4-8", provider: "sssaicode" },
},
},
{
@@ -1111,7 +1111,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1122,7 +1122,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "micu",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "micu" },
model: { default: "claude-opus-4-8", provider: "micu" },
},
},
{
@@ -1135,7 +1135,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1146,7 +1146,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "ctok",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "ctok" },
model: { default: "claude-opus-4-8", provider: "ctok" },
},
},
{
@@ -1159,7 +1159,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5" },
],
@@ -1168,7 +1168,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
icon: "eflowcode",
iconColor: "#000000",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "eflowcode" },
model: { default: "claude-opus-4-8", provider: "eflowcode" },
},
},
{
@@ -1259,7 +1259,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
api_key: "",
api_mode: "anthropic_messages",
models: [
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-8", name: "Claude Opus 4.8" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{
id: "claude-haiku-4-5-20251001",
@@ -1270,7 +1270,7 @@ export const hermesProviderPresets: HermesProviderPreset[] = [
category: "aggregator",
icon: "pipellm",
suggestedDefaults: {
model: { default: "claude-opus-4-7", provider: "pipellm" },
model: { default: "claude-opus-4-8", provider: "pipellm" },
},
},
{
+76 -76
View File
@@ -109,8 +109,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "anthropic/claude-opus-4.7",
name: "Claude Opus 4.7",
id: "anthropic/claude-opus-4.8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -135,11 +135,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "shengsuanyun/anthropic/claude-opus-4.7",
primary: "shengsuanyun/anthropic/claude-opus-4.8",
fallbacks: ["shengsuanyun/anthropic/claude-sonnet-4.6"],
},
modelCatalog: {
"shengsuanyun/anthropic/claude-opus-4.7": { alias: "Opus" },
"shengsuanyun/anthropic/claude-opus-4.8": { alias: "Opus" },
"shengsuanyun/anthropic/claude-sonnet-4.6": { alias: "Sonnet" },
},
},
@@ -866,8 +866,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -891,11 +891,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "aihubmix/claude-opus-4-7",
primary: "aihubmix/claude-opus-4-8",
fallbacks: ["aihubmix/claude-sonnet-4-6"],
},
modelCatalog: {
"aihubmix/claude-opus-4-7": { alias: "Opus" },
"aihubmix/claude-opus-4-8": { alias: "Opus" },
"aihubmix/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -910,8 +910,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -935,11 +935,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "dmxapi/claude-opus-4-7",
primary: "dmxapi/claude-opus-4-8",
fallbacks: ["dmxapi/claude-sonnet-4-6"],
},
modelCatalog: {
"dmxapi/claude-opus-4-7": { alias: "Opus" },
"dmxapi/claude-opus-4-8": { alias: "Opus" },
"dmxapi/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -954,8 +954,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
},
{
@@ -986,7 +986,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
primary: "claudecn/claude-sonnet-4-6",
},
modelCatalog: {
"claudecn/claude-opus-4-7": { alias: "Opus" },
"claudecn/claude-opus-4-8": { alias: "Opus" },
"claudecn/claude-sonnet-4-6": { alias: "Sonnet" },
"claudecn/claude-haiku-4-5": { alias: "Haiku" },
},
@@ -1002,8 +1002,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
},
{
@@ -1034,7 +1034,7 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
primary: "runapi/claude-sonnet-4-6",
},
modelCatalog: {
"runapi/claude-opus-4-7": { alias: "Opus" },
"runapi/claude-opus-4-8": { alias: "Opus" },
"runapi/claude-sonnet-4-6": { alias: "Sonnet" },
"runapi/claude-haiku-4-5": { alias: "Haiku" },
},
@@ -1050,8 +1050,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "openai-completions",
models: [
{
id: "anthropic/claude-opus-4.7",
name: "Claude Opus 4.7",
id: "anthropic/claude-opus-4.8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1075,11 +1075,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "openrouter/anthropic/claude-opus-4.7",
primary: "openrouter/anthropic/claude-opus-4.8",
fallbacks: ["openrouter/anthropic/claude-sonnet-4.6"],
},
modelCatalog: {
"openrouter/anthropic/claude-opus-4.7": { alias: "Opus" },
"openrouter/anthropic/claude-opus-4.8": { alias: "Opus" },
"openrouter/anthropic/claude-sonnet-4.6": { alias: "Sonnet" },
},
},
@@ -1336,8 +1336,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "claude-opus-4-7",
id: "claude-opus-4-8",
name: "claude-opus-4-8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1366,11 +1366,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "pipellm/claude-opus-4-7",
primary: "pipellm/claude-opus-4-8",
fallbacks: ["pipellm/claude-sonnet-4-6"],
},
modelCatalog: {
"pipellm/claude-opus-4-7": { alias: "Opus" },
"pipellm/claude-opus-4-8": { alias: "Opus" },
"pipellm/claude-sonnet-4-6": { alias: "Sonnet" },
"pipellm/claude-haiku-4-5-20251001": { alias: "Haiku" },
},
@@ -1388,8 +1388,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1414,11 +1414,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "packycode/claude-opus-4-7",
primary: "packycode/claude-opus-4-8",
fallbacks: ["packycode/claude-sonnet-4-6"],
},
modelCatalog: {
"packycode/claude-opus-4-7": { alias: "Opus" },
"packycode/claude-opus-4-8": { alias: "Opus" },
"packycode/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1433,8 +1433,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
},
{
@@ -1462,11 +1462,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "apikeyfun/claude-opus-4-7",
primary: "apikeyfun/claude-opus-4-8",
fallbacks: ["apikeyfun/claude-sonnet-4-6"],
},
modelCatalog: {
"apikeyfun/claude-opus-4-7": { alias: "Opus" },
"apikeyfun/claude-opus-4-8": { alias: "Opus" },
"apikeyfun/claude-sonnet-4-6": { alias: "Sonnet" },
"apikeyfun/claude-haiku-4-5": { alias: "Haiku" },
},
@@ -1578,8 +1578,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1605,11 +1605,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "cubence/claude-opus-4-7",
primary: "cubence/claude-opus-4-8",
fallbacks: ["cubence/claude-sonnet-4-6"],
},
modelCatalog: {
"cubence/claude-opus-4-7": { alias: "Opus" },
"cubence/claude-opus-4-8": { alias: "Opus" },
"cubence/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1624,8 +1624,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1651,11 +1651,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "aigocode/claude-opus-4-7",
primary: "aigocode/claude-opus-4-8",
fallbacks: ["aigocode/claude-sonnet-4-6"],
},
modelCatalog: {
"aigocode/claude-opus-4-7": { alias: "Opus" },
"aigocode/claude-opus-4-8": { alias: "Opus" },
"aigocode/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1670,8 +1670,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1697,11 +1697,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "rightcode/claude-opus-4-7",
primary: "rightcode/claude-opus-4-8",
fallbacks: ["rightcode/claude-sonnet-4-6"],
},
modelCatalog: {
"rightcode/claude-opus-4-7": { alias: "Opus" },
"rightcode/claude-opus-4-8": { alias: "Opus" },
"rightcode/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1716,8 +1716,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1743,11 +1743,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "aicodemirror/claude-opus-4-7",
primary: "aicodemirror/claude-opus-4-8",
fallbacks: ["aicodemirror/claude-sonnet-4-6"],
},
modelCatalog: {
"aicodemirror/claude-opus-4-7": { alias: "Opus" },
"aicodemirror/claude-opus-4-8": { alias: "Opus" },
"aicodemirror/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1762,8 +1762,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1789,11 +1789,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "crazyrouter/claude-opus-4-7",
primary: "crazyrouter/claude-opus-4-8",
fallbacks: ["crazyrouter/claude-sonnet-4-6"],
},
modelCatalog: {
"crazyrouter/claude-opus-4-7": { alias: "Opus" },
"crazyrouter/claude-opus-4-8": { alias: "Opus" },
"crazyrouter/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1808,8 +1808,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1835,11 +1835,11 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "sssaicode/claude-opus-4-7",
primary: "sssaicode/claude-opus-4-8",
fallbacks: ["sssaicode/claude-sonnet-4-6"],
},
modelCatalog: {
"sssaicode/claude-opus-4-7": { alias: "Opus" },
"sssaicode/claude-opus-4-8": { alias: "Opus" },
"sssaicode/claude-sonnet-4-6": { alias: "Sonnet" },
},
},
@@ -1856,8 +1856,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1877,10 +1877,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "compshare/claude-opus-4-7",
primary: "compshare/claude-opus-4-8",
},
modelCatalog: {
"compshare/claude-opus-4-7": { alias: "Opus" },
"compshare/claude-opus-4-8": { alias: "Opus" },
},
},
},
@@ -1896,8 +1896,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1917,10 +1917,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "compshare-coding/claude-opus-4-7",
primary: "compshare-coding/claude-opus-4-8",
},
modelCatalog: {
"compshare-coding/claude-opus-4-7": { alias: "Opus" },
"compshare-coding/claude-opus-4-8": { alias: "Opus" },
},
},
},
@@ -1934,8 +1934,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1955,10 +1955,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "micu/claude-opus-4-7",
primary: "micu/claude-opus-4-8",
},
modelCatalog: {
"micu/claude-opus-4-7": { alias: "Opus" },
"micu/claude-opus-4-8": { alias: "Opus" },
},
},
},
@@ -1972,8 +1972,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "anthropic-messages",
models: [
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25 },
},
@@ -1993,10 +1993,10 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
},
suggestedDefaults: {
model: {
primary: "ctok/claude-opus-4-7",
primary: "ctok/claude-opus-4-8",
},
modelCatalog: {
"ctok/claude-opus-4-7": { alias: "Opus" },
"ctok/claude-opus-4-8": { alias: "Opus" },
},
},
},
@@ -2109,8 +2109,8 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
api: "bedrock-converse-stream",
models: [
{
id: "anthropic.claude-opus-4-7",
name: "Claude Opus 4.7",
id: "anthropic.claude-opus-4-8",
name: "Claude Opus 4.8",
contextWindow: 1000000,
cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
},
+21 -21
View File
@@ -166,8 +166,8 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record<
],
"@ai-sdk/amazon-bedrock": [
{
id: "global.anthropic.claude-opus-4-7",
name: "Claude Opus 4.7",
id: "global.anthropic.claude-opus-4-8",
name: "Claude Opus 4.8",
contextLimit: 1000000,
outputLimit: 128000,
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
@@ -234,8 +234,8 @@ export const OPENCODE_PRESET_MODEL_VARIANTS: Record<
},
},
{
id: "claude-opus-4-7",
name: "Claude Opus 4.7",
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
contextLimit: 1000000,
outputLimit: 128000,
modalities: { input: ["text", "image", "pdf"], output: ["text"] },
@@ -310,7 +310,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"anthropic/claude-opus-4.7": { name: "Claude Opus 4.7" },
"anthropic/claude-opus-4.8": { name: "Claude Opus 4.8" },
"anthropic/claude-sonnet-4.6": { name: "Claude Sonnet 4.6" },
},
},
@@ -993,7 +993,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "aggregator",
@@ -1021,7 +1021,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "aggregator",
@@ -1049,7 +1049,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"anthropic/claude-sonnet-4.6": { name: "Claude Sonnet 4.6" },
"anthropic/claude-opus-4.7": { name: "Claude Opus 4.7" },
"anthropic/claude-opus-4.8": { name: "Claude Opus 4.8" },
},
},
category: "aggregator",
@@ -1161,7 +1161,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"claude-opus-4-7": { name: "claude-opus-4-7" },
"claude-opus-4-8": { name: "claude-opus-4-8" },
"claude-sonnet-4-6": { name: "claude-sonnet-4-6" },
"claude-haiku-4-5-20251001": { name: "claude-haiku-4-5-20251001" },
},
@@ -1191,7 +1191,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1219,7 +1219,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-haiku-4-5": { name: "Claude Haiku 4.5" },
},
@@ -1334,7 +1334,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1364,7 +1364,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1423,7 +1423,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4.6": { name: "Claude Sonnet 4.6" },
"claude-opus-4.7": { name: "Claude Opus 4.7" },
"claude-opus-4.8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1453,7 +1453,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
"claude-haiku-4-5": { name: "Claude Haiku 4.5" },
},
},
@@ -1483,7 +1483,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
"claude-haiku-4-5": { name: "Claude Haiku 4.5" },
},
},
@@ -1513,7 +1513,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1543,7 +1543,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
},
models: {
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
},
},
category: "third_party",
@@ -1572,7 +1572,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
},
},
@@ -1602,7 +1602,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"claude-opus-4-7": { name: "Claude Opus 4.7" },
"claude-opus-4-8": { name: "Claude Opus 4.8" },
"claude-sonnet-4-6": { name: "Claude Sonnet 4.6" },
},
},
@@ -1690,7 +1690,7 @@ export const opencodeProviderPresets: OpenCodeProviderPreset[] = [
setCacheKey: true,
},
models: {
"global.anthropic.claude-opus-4-7": { name: "Claude Opus 4.7" },
"global.anthropic.claude-opus-4-8": { name: "Claude Opus 4.8" },
"global.anthropic.claude-sonnet-4-6": {
name: "Claude Sonnet 4.6",
},
+1 -1
View File
@@ -44,7 +44,7 @@ const NEWAPI_DEFAULT_MODELS: UniversalProviderModels = {
model: "claude-sonnet-4-6",
haikuModel: "claude-haiku-4-5-20251001",
sonnetModel: "claude-sonnet-4-6",
opusModel: "claude-opus-4-7",
opusModel: "claude-opus-4-8",
},
codex: {
model: "gpt-5.4",
+3 -3
View File
@@ -1818,9 +1818,9 @@
"addModel": "Add model",
"noModels": "No models configured. Switching to this provider won't change the default model.",
"modelId": "Model ID",
"modelIdPlaceholder": "anthropic/claude-opus-4-7",
"modelIdPlaceholder": "anthropic/claude-opus-4-8",
"modelName": "Display name",
"modelNamePlaceholder": "Claude Opus 4.7",
"modelNamePlaceholder": "Claude Opus 4.8",
"contextLength": "Context length",
"advancedOptions": "Advanced options",
"modelsHint": "On switch, the first model is written to top-level model.default.",
@@ -2623,7 +2623,7 @@
"artistry": "Highly creative and artistic task category that inspires novel ideas and creative solutions. Defaults to Gemini 3 Pro max variant.",
"quick": "Lightweight task category for single-file modifications, typo fixes, and simple adjustments. Defaults to Claude Haiku 4.5 fast model.",
"unspecifiedLow": "Uncategorized low-effort task category for tasks that don't fit other categories with small workload. Defaults to Claude Sonnet 4.5.",
"unspecifiedHigh": "Uncategorized high-effort task category for tasks that don't fit other categories with large workload. Defaults to Claude Opus 4.7 max variant.",
"unspecifiedHigh": "Uncategorized high-effort task category for tasks that don't fit other categories with large workload. Defaults to Claude Opus 4.8 max variant.",
"writing": "Writing category for documentation, prose and technical writing. Defaults to Gemini 3 Flash fast generation model."
},
"slimAgentDesc": {
+3 -3
View File
@@ -1818,9 +1818,9 @@
"addModel": "モデルを追加",
"noModels": "モデル未設定。このプロバイダーに切り替えてもデフォルトモデルは更新されません。",
"modelId": "モデル ID",
"modelIdPlaceholder": "anthropic/claude-opus-4-7",
"modelIdPlaceholder": "anthropic/claude-opus-4-8",
"modelName": "表示名",
"modelNamePlaceholder": "Claude Opus 4.7",
"modelNamePlaceholder": "Claude Opus 4.8",
"contextLength": "コンテキスト長",
"advancedOptions": "詳細オプション",
"modelsHint": "切り替え時、最初のモデルが model.default に書き込まれます。",
@@ -2623,7 +2623,7 @@
"artistry": "高度にクリエイティブで芸術的なタスクカテゴリ。斬新なアイデアとクリエイティブなソリューションを促進。デフォルトで Gemini 3 Pro の max バリアントを使用。",
"quick": "軽量タスクカテゴリ。単一ファイルの修正、タイポ修正、簡単な調整などの些細な作業に使用。デフォルトで Claude Haiku 4.5 高速モデルを使用。",
"unspecifiedLow": "未分類の低作業量タスクカテゴリ。他のカテゴリに該当せず作業量が小さいタスクに適用。デフォルトで Claude Sonnet 4.5 を使用。",
"unspecifiedHigh": "未分類の高作業量タスクカテゴリ。他のカテゴリに該当せず作業量が大きいタスクに適用。デフォルトで Claude Opus 4.7 の max バリアントを使用。",
"unspecifiedHigh": "未分類の高作業量タスクカテゴリ。他のカテゴリに該当せず作業量が大きいタスクに適用。デフォルトで Claude Opus 4.8 の max バリアントを使用。",
"writing": "ライティングカテゴリ。ドキュメント、散文、技術文書に特化。デフォルトで Gemini 3 Flash 高速生成モデルを使用。"
},
"slimAgentDesc": {
+3 -3
View File
@@ -1764,9 +1764,9 @@
"addModel": "新增模型",
"noModels": "暫無模型設定。切換至此供應商時將不會更新預設模型。",
"modelId": "模型 ID",
"modelIdPlaceholder": "anthropic/claude-opus-4-7",
"modelIdPlaceholder": "anthropic/claude-opus-4-8",
"modelName": "顯示名稱",
"modelNamePlaceholder": "Claude Opus 4.7",
"modelNamePlaceholder": "Claude Opus 4.8",
"contextLength": "上下文長度",
"advancedOptions": "進階選項",
"modelsHint": "切換至此供應商時,第一個模型會寫入頂層 model.default。",
@@ -2569,7 +2569,7 @@
"artistry": "高度創意與藝術性任務類別,激發新穎想法和創造性解決方案,預設使用 Gemini 3 Pro 的最大變體。",
"quick": "輕量任務類別,用於單檔案修改、錯別字修復、簡單調整等瑣碎工作,預設使用 Claude Haiku 4.5 快速模型。",
"unspecifiedLow": "未分類低工作量任務類別,適用於不適合其他類別且工作量較小的任務,預設使用 Claude Sonnet 4.5。",
"unspecifiedHigh": "未分類高工作量任務類別,適用於不適合其他類別且工作量較大的任務,預設使用 Claude Opus 4.7 的最大變體。",
"unspecifiedHigh": "未分類高工作量任務類別,適用於不適合其他類別且工作量較大的任務,預設使用 Claude Opus 4.8 的最大變體。",
"writing": "寫作類別,專注於文件、散文和技術寫作,預設使用 Gemini 3 Flash 快速產生模型。"
},
"slimAgentDesc": {
+3 -3
View File
@@ -1818,9 +1818,9 @@
"addModel": "添加模型",
"noModels": "暂无模型配置。切换到此供应商时将不会更新默认模型。",
"modelId": "模型 ID",
"modelIdPlaceholder": "anthropic/claude-opus-4-7",
"modelIdPlaceholder": "anthropic/claude-opus-4-8",
"modelName": "显示名称",
"modelNamePlaceholder": "Claude Opus 4.7",
"modelNamePlaceholder": "Claude Opus 4.8",
"contextLength": "上下文长度",
"advancedOptions": "高级选项",
"modelsHint": "切换到此供应商时,第一个模型会写入顶层 model.default。",
@@ -2623,7 +2623,7 @@
"artistry": "高度创意与艺术性任务类别,激发新颖想法和创造性解决方案,默认使用 Gemini 3 Pro 的最大变体。",
"quick": "轻量任务类别,用于单文件修改、错别字修复、简单调整等琐碎工作,默认使用 Claude Haiku 4.5 快速模型。",
"unspecifiedLow": "未归类低工作量任务类别,适用于不适合其他类别且工作量较小的任务,默认使用 Claude Sonnet 4.5。",
"unspecifiedHigh": "未归类高工作量任务类别,适用于不适合其他类别且工作量较大的任务,默认使用 Claude Opus 4.7 的最大变体。",
"unspecifiedHigh": "未归类高工作量任务类别,适用于不适合其他类别且工作量较大的任务,默认使用 Claude Opus 4.8 的最大变体。",
"writing": "写作类别,专注于文档、散文和技术写作,默认使用 Gemini 3 Flash 快速生成模型。"
},
"slimAgentDesc": {
+5 -5
View File
@@ -29,7 +29,7 @@ export const OMO_BUILTIN_AGENTS: OmoAgentDef[] = [
display: "Sisyphus",
descKey: "omo.agentDesc.sisyphus",
tooltipKey: "omo.agentTooltip.sisyphus",
recommended: "claude-opus-4-7",
recommended: "claude-opus-4-8",
group: "main",
},
{
@@ -45,7 +45,7 @@ export const OMO_BUILTIN_AGENTS: OmoAgentDef[] = [
display: "Prometheus",
descKey: "omo.agentDesc.prometheus",
tooltipKey: "omo.agentTooltip.prometheus",
recommended: "claude-opus-4-7",
recommended: "claude-opus-4-8",
group: "main",
},
{
@@ -162,7 +162,7 @@ export const OMO_BUILTIN_CATEGORIES: OmoCategoryDef[] = [
display: "Unspecified High",
descKey: "omo.categoryDesc.unspecifiedHigh",
tooltipKey: "omo.categoryTooltip.unspecifiedHigh",
recommended: "claude-opus-4-7",
recommended: "claude-opus-4-8",
},
{
key: "writing",
@@ -281,7 +281,7 @@ export const OMO_BACKGROUND_TASK_PLACEHOLDER = `{
"google": 10
},
"modelConcurrency": {
"anthropic/claude-opus-4-7": 2,
"anthropic/claude-opus-4-8": 2,
"google/gemini-3-flash": 10
}
}`;
@@ -320,7 +320,7 @@ export const OMO_SLIM_BUILTIN_AGENTS: OmoAgentDef[] = [
display: "Orchestrator",
descKey: "omo.slimAgentDesc.orchestrator",
tooltipKey: "omo.slimAgentTooltip.orchestrator",
recommended: "claude-opus-4-7",
recommended: "claude-opus-4-8",
group: "main",
},
{
+4 -10
View File
@@ -20,7 +20,7 @@ describe("AWS Bedrock OpenCode Provider Presets", () => {
expect(variants.length).toBeGreaterThan(0);
const opusModel = variants.find((v) =>
v.id.includes("anthropic.claude-opus-4-7"),
v.id.includes("anthropic.claude-opus-4-8"),
);
expect(opusModel).toBeDefined();
});
@@ -34,9 +34,7 @@ describe("AWS Bedrock OpenCode Provider Presets", () => {
});
it("Bedrock preset should use @ai-sdk/amazon-bedrock npm package", () => {
expect(bedrockPreset!.settingsConfig.npm).toBe(
"@ai-sdk/amazon-bedrock",
);
expect(bedrockPreset!.settingsConfig.npm).toBe("@ai-sdk/amazon-bedrock");
});
it("Bedrock preset should have region in options", () => {
@@ -50,9 +48,7 @@ describe("AWS Bedrock OpenCode Provider Presets", () => {
it("Bedrock preset should have template values for AWS credentials", () => {
expect(bedrockPreset!.templateValues).toBeDefined();
expect(bedrockPreset!.templateValues!.region).toBeDefined();
expect(bedrockPreset!.templateValues!.region.editorValue).toBe(
"us-west-2",
);
expect(bedrockPreset!.templateValues!.region.editorValue).toBe("us-west-2");
expect(bedrockPreset!.templateValues!.accessKeyId).toBeDefined();
expect(bedrockPreset!.templateValues!.secretAccessKey).toBeDefined();
});
@@ -61,9 +57,7 @@ describe("AWS Bedrock OpenCode Provider Presets", () => {
const models = bedrockPreset!.settingsConfig.models;
expect(models).toBeDefined();
const modelIds = Object.keys(models!);
expect(
modelIds.some((id) => id.includes("anthropic.claude")),
).toBe(true);
expect(modelIds.some((id) => id.includes("anthropic.claude"))).toBe(true);
});
it("Kimi For Coding preset should use Anthropic with the coding endpoint", () => {
@@ -24,7 +24,7 @@ describe("TheRouter provider presets", () => {
expect(env.ANTHROPIC_DEFAULT_SONNET_MODEL).toBe(
"anthropic/claude-sonnet-4.6",
);
expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("anthropic/claude-opus-4.7");
expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("anthropic/claude-opus-4.8");
});
it("uses the OpenAI-compatible v1 endpoint for Codex", () => {