From 57ac2a004790a32d3a8945a4bff8d594c75b1bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chindri=C8=99=20Mihai=20-=20Alexandru?= Date: Mon, 6 Apr 2026 21:19:03 +0300 Subject: [PATCH] feat(provider): add AdaL (SylphAI) as a built-in provider Add AdaL CLI by SylphAI as a new provider option in ForgeCode. AdaL is registered as an OpenAI-compatible provider with api.sylph.ai endpoints, enabling ForgeCode users to access AdaL's models via API key auth. Changes: - Add 'adal' entry to provider.json with OpenAI response type - Add ProviderId::ADAL constant to forge_domain - Wire up display_name ("AdaL"), FromStr, and built_in_providers() - Add missing FromStr arms for vertex_ai_anthropic, bedrock, opencode_zen - Add unit tests for ADAL display name, from_str, and built_in_providers Co-Authored-By: ForgeCode --- crates/forge_domain/src/provider.rs | 25 ++++++++++++++++++++ crates/forge_repo/src/provider/provider.json | 9 +++++++ 2 files changed, 34 insertions(+) diff --git a/crates/forge_domain/src/provider.rs b/crates/forge_domain/src/provider.rs index a65b43e416..832ec98064 100644 --- a/crates/forge_domain/src/provider.rs +++ b/crates/forge_domain/src/provider.rs @@ -73,6 +73,7 @@ impl ProviderId { pub const FIREWORKS_AI: ProviderId = ProviderId(Cow::Borrowed("fireworks-ai")); pub const NOVITA: ProviderId = ProviderId(Cow::Borrowed("novita")); pub const GOOGLE_AI_STUDIO: ProviderId = ProviderId(Cow::Borrowed("google_ai_studio")); + pub const ADAL: ProviderId = ProviderId(Cow::Borrowed("adal")); /// Returns all built-in provider IDs /// @@ -106,6 +107,7 @@ impl ProviderId { ProviderId::FIREWORKS_AI, ProviderId::NOVITA, ProviderId::GOOGLE_AI_STUDIO, + ProviderId::ADAL, ] } @@ -132,6 +134,7 @@ impl ProviderId { "fireworks-ai" => "FireworksAI".to_string(), "novita" => "Novita".to_string(), "google_ai_studio" => "GoogleAIStudio".to_string(), + "adal" => "AdaL".to_string(), _ => { // For other providers, use UpperCamelCase conversion use convert_case::{Case, Casing}; @@ -176,7 +179,11 @@ impl std::str::FromStr for ProviderId { "codex" => ProviderId::CODEX, "fireworks-ai" => ProviderId::FIREWORKS_AI, "novita" => ProviderId::NOVITA, + "vertex_ai_anthropic" => ProviderId::VERTEX_AI_ANTHROPIC, + "bedrock" => ProviderId::BEDROCK, + "opencode_zen" => ProviderId::OPENCODE_ZEN, "google_ai_studio" => ProviderId::GOOGLE_AI_STUDIO, + "adal" => ProviderId::ADAL, // For custom providers, use Cow::Owned to avoid memory leaks custom => ProviderId(Cow::Owned(custom.to_string())), }; @@ -581,6 +588,24 @@ mod tests { assert_eq!(actual, expected); } + #[test] + fn test_adal_from_str() { + let actual = ProviderId::from_str("adal").unwrap(); + let expected = ProviderId::ADAL; + assert_eq!(actual, expected); + } + + #[test] + fn test_adal_display_name() { + assert_eq!(ProviderId::ADAL.to_string(), "AdaL"); + } + + #[test] + fn test_adal_in_built_in_providers() { + let built_in = ProviderId::built_in_providers(); + assert!(built_in.contains(&ProviderId::ADAL)); + } + #[test] fn test_io_intelligence() { let fixture = "test_key"; diff --git a/crates/forge_repo/src/provider/provider.json b/crates/forge_repo/src/provider/provider.json index 16dc7899f6..56434a6800 100644 --- a/crates/forge_repo/src/provider/provider.json +++ b/crates/forge_repo/src/provider/provider.json @@ -3099,5 +3099,14 @@ "input_modalities": ["text"] } ] + }, + { + "id": "adal", + "api_key_vars": "ADAL_API_KEY", + "url_param_vars": [], + "response_type": "OpenAI", + "url": "https://api.sylph.ai/v1/chat/completions", + "models": "https://api.sylph.ai/v1/models", + "auth_methods": ["api_key"] } ]