@@ -13,7 +13,7 @@ type Provider interface {
1313}
1414
1515// NewProvider returns the provider selected by ITERATE_PROVIDER.
16- // Supported values: ollama, openai, anthropic, groq, gemini, nvidia (default: gemini)
16+ // Supported values: ollama, openai, anthropic, groq, gemini, nvidia, opencode (default: gemini)
1717// If apiKey is provided, it takes priority over environment variables.
1818func NewProvider (providerName string , apiKey ... string ) (Provider , error ) {
1919 providedKey := ""
@@ -102,12 +102,26 @@ func NewProvider(providerName string, apiKey ...string) (Provider, error) {
102102 if key == "" {
103103 return nil , fmt .Errorf ("NVIDIA_API_KEY is required for nvidia provider (or use --api-key)" )
104104 }
105- return NewNvidia (OpenAICompatConfig {
105+ return NewOpenAICompat (OpenAICompatConfig {
106106 BaseURL : getEnvOr ("NVIDIA_BASE_URL" , "https://integrate.api.nvidia.com/v1" ),
107107 Model : getEnvOr ("ITERATE_MODEL" , "meta/llama-3.3-70b-instruct" ),
108108 APIKey : key ,
109109 }), nil
110110
111+ case "opencode" :
112+ key := providedKey
113+ if key == "" {
114+ key = os .Getenv ("OPENCODE_API_KEY" )
115+ }
116+ if key == "" {
117+ return nil , fmt .Errorf ("OPENCODE_API_KEY is required for opencode provider (or use --api-key)" )
118+ }
119+ return NewOpenAICompat (OpenAICompatConfig {
120+ BaseURL : "https://opencode.ai/zen/v1" ,
121+ Model : getEnvOr ("ITERATE_MODEL" , "opencode/nemotron-3-super-free" ),
122+ APIKey : key ,
123+ }), nil
124+
111125 default :
112126 baseURL := os .Getenv ("ITERATE_BASE_URL" )
113127 if baseURL == "" {
0 commit comments