From b28a5fe384fd45255a6b249c7febd3b4ffc0fd2f Mon Sep 17 00:00:00 2001 From: asepharyana Date: Fri, 28 Aug 2026 00:31:55 +0700 Subject: [PATCH] fix(api): model Opus default pakai claude-opus-5 (bukan -4-8) Model terbaru di 9router adalah claude-opus-5. Update semua jalur model default Opus: - fix(app_config_repo): fallback default_model custom_model.unwrap_or -> claude-opus-5; model_roles list claude-opus-5 - fix(app_config): router provider default_model -> claude-opus-5 - fix(settings test): assertion claude-opus-5 - fix(data): ~/.local/share/zesdex/settings.json model -> claude-opus-5 --- Cargo.lock | 22 +++++++++---------- apps/domain/src/cms/app_config.rs | 4 ++-- apps/domain/src/cms/settings.rs | 6 ++--- .../src/persistence/cms/app_config_repo.rs | 18 +++++++-------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0711e40..1a0898a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4862,7 +4862,7 @@ dependencies = [ [[package]] name = "zesdex-api" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "argon2", @@ -4885,7 +4885,7 @@ dependencies = [ [[package]] name = "zesdex-application" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "base64", @@ -4902,7 +4902,7 @@ dependencies = [ [[package]] name = "zesdex-bootstrap" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "chrono", @@ -4919,7 +4919,7 @@ dependencies = [ [[package]] name = "zesdex-daemon" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "base64", @@ -4943,7 +4943,7 @@ dependencies = [ [[package]] name = "zesdex-domain" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "base64", @@ -4959,7 +4959,7 @@ dependencies = [ [[package]] name = "zesdex-gateway" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "axum", @@ -4986,7 +4986,7 @@ dependencies = [ [[package]] name = "zesdex-grpc" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "axum", @@ -5003,7 +5003,7 @@ dependencies = [ [[package]] name = "zesdex-infrastructure" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "argon2", @@ -5051,7 +5051,7 @@ dependencies = [ [[package]] name = "zesdex-tui" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "base64", @@ -5077,7 +5077,7 @@ dependencies = [ [[package]] name = "zesdex-web" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "axum", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "zesdex-ws" -version = "1.19.2" +version = "1.19.3" dependencies = [ "anyhow", "axum", diff --git a/apps/domain/src/cms/app_config.rs b/apps/domain/src/cms/app_config.rs index 61694df..65ffe84 100644 --- a/apps/domain/src/cms/app_config.rs +++ b/apps/domain/src/cms/app_config.rs @@ -80,7 +80,7 @@ impl Default for AppConfig { /// /// ## Defaults /// - Zen provider: `deepseek-v4-flash-free` model - /// - Router provider: `claude-opus-4-8` model + /// - Router provider: `claude-opus-5` model /// - Default role: "default" → zen / deepseek-v4-flash-free, temp 0.7 /// - `default_context_window`: 256,000 tokens fn default() -> Self { @@ -99,7 +99,7 @@ impl Default for AppConfig { ProviderConfig { api_base: "https://9router.asepharyana.my.id/v1".to_string(), api_key_env: Some("ROUTER_API_KEY".to_string()), - default_model: Some("claude-opus-4-8".to_string()), + default_model: Some("claude-opus-5".to_string()), default_api_key: None, }, ); diff --git a/apps/domain/src/cms/settings.rs b/apps/domain/src/cms/settings.rs index ef686ac..94ab5b6 100644 --- a/apps/domain/src/cms/settings.rs +++ b/apps/domain/src/cms/settings.rs @@ -151,12 +151,12 @@ mod tests { crate::cms::ProviderConfig { api_base: "https://9router.example/v1".to_string(), api_key_env: Some("ANTHROPIC_API_KEY".to_string()), - default_model: Some("claude-opus-4-8".to_string()), + default_model: Some("claude-opus-5".to_string()), default_api_key: Some("sk-test".to_string()), }, ); cfg.default_provider = "claude".to_string(); - cfg.default_model = "claude-opus-4-8".to_string(); + cfg.default_model = "claude-opus-5".to_string(); cfg } @@ -169,7 +169,7 @@ mod tests { }; let model = resolve_effective_model(&settings, &claude_app_config()); - assert_eq!(model, "claude-opus-4-8"); + assert_eq!(model, "claude-opus-5"); } #[test] diff --git a/apps/infrastructure/src/persistence/cms/app_config_repo.rs b/apps/infrastructure/src/persistence/cms/app_config_repo.rs index 0d023bb..ab0d7ab 100644 --- a/apps/infrastructure/src/persistence/cms/app_config_repo.rs +++ b/apps/infrastructure/src/persistence/cms/app_config_repo.rs @@ -79,7 +79,7 @@ fn detect_claude_settings_provider() -> Option<(ProviderConfig, Option)> /// persisted entry with the current base URL + key from settings.json). /// 2. Registers known Claude model roles if missing. /// 3. Always sets `default_provider = "claude"` and -/// `default_model = custom_model.unwrap_or("claude-opus-4-8")` so Opus +/// `default_model = custom_model.unwrap_or("claude-opus-5")` so Opus /// is the default whenever `~/.claude/settings.json` is present. fn apply_claude_provider( cfg: &mut AppConfig, @@ -89,7 +89,7 @@ fn apply_claude_provider( cfg.providers.insert("claude".to_string(), claude_provider); let claude_models: [(&str, &str); 3] = [ - ("claude-opus-4-8", "claude-opus-4-8"), + ("claude-opus-5", "claude-opus-5"), ("claude-sonnet-5", "claude-sonnet-5"), ("claude-haiku-4-5", "claude-haiku-4-5-20251001"), ]; @@ -118,7 +118,7 @@ fn apply_claude_provider( // Always prefer the Claude provider + Opus model when settings.json // is present — this is the user's explicit custom endpoint choice. cfg.default_provider = "claude".to_string(); - cfg.default_model = custom_model.unwrap_or_else(|| "claude-opus-4-8".to_string()); + cfg.default_model = custom_model.unwrap_or_else(|| "claude-opus-5".to_string()); } impl AppConfigRepository for JsonAppConfigRepository { @@ -159,7 +159,7 @@ mod tests { ProviderConfig { api_base: base.to_string(), api_key_env: Some("ANTHROPIC_API_KEY".to_string()), - default_model: Some("claude-opus-4-8".to_string()), + default_model: Some("claude-opus-5".to_string()), default_api_key: key.map(|s| s.to_string()), } } @@ -209,10 +209,10 @@ mod tests { assert_eq!(claude.default_api_key.as_deref(), Some("sk-new")); // Insert (not or_insert) → stale entry refreshed. assert_eq!(cfg.default_provider, "claude"); - assert_eq!(cfg.default_model, "claude-opus-4-8"); + assert_eq!(cfg.default_model, "claude-opus-5"); // Claude model roles registered. - assert!(cfg.model_roles.contains_key("claude-opus-4-8")); + assert!(cfg.model_roles.contains_key("claude-opus-5")); assert!(cfg.model_roles.contains_key("claude-sonnet-5")); assert!(cfg.model_roles.contains_key("claude-haiku-4-5")); } @@ -223,10 +223,10 @@ mod tests { apply_claude_provider( &mut cfg, claude_provider("https://9router.example/v1", Some("sk-new")), - Some("claude-opus-4-8".to_string()), + Some("claude-opus-5".to_string()), ); - assert_eq!(cfg.default_model, "claude-opus-4-8"); - assert!(cfg.model_roles.contains_key("claude-opus-4-8")); + assert_eq!(cfg.default_model, "claude-opus-5"); + assert!(cfg.model_roles.contains_key("claude-opus-5")); } #[test]