@@ -34,8 +34,11 @@ type TokenStreamer interface {
3434}
3535
3636// NewProvider returns the provider selected by ITERATE_PROVIDER.
37- // Supported values: ollama, openai, anthropic, groq, gemini, nvidia, opencode (default: gemini)
37+ // Supported values: ollama, openai, anthropic, groq, gemini, nvidia, opencode, opencode-cli (default: gemini)
3838// If apiKey is provided, it takes priority over environment variables.
39+ //
40+ // opencode-cli uses the OpenCode CLI internally, enabling access to free models
41+ // like mimo-v2-pro-free without requiring a public REST API.
3942func NewProvider (providerName string , apiKey ... string ) (Provider , error ) {
4043 providedKey := ""
4144 if len (apiKey ) > 0 {
@@ -137,14 +140,22 @@ func NewProvider(providerName string, apiKey ...string) (Provider, error) {
137140 if key == "" {
138141 return nil , fmt .Errorf ("OPENCODE_API_KEY is required for opencode provider (or use --api-key)" )
139142 }
140- model := getEnvOr ("ITERATE_MODEL" , "nemotron-3-super -free" )
143+ model := getEnvOr ("ITERATE_MODEL" , "mimo-v2-pro -free" )
141144 model = strings .TrimPrefix (model , "opencode/" )
142145 return NewOpenAICompat (OpenAICompatConfig {
143- BaseURL : getEnvOr ("OPENCODE_BASE_URL" , "https://opencode.ai/zen/go /v1" ),
146+ BaseURL : getEnvOr ("OPENCODE_BASE_URL" , "https://api. opencode.ai/v1" ),
144147 Model : model ,
145148 APIKey : key ,
146149 }), nil
147150
151+ case "opencode-cli" :
152+ // Uses OpenCode CLI internally - enables free model access
153+ model := getEnvOr ("ITERATE_MODEL" , "mimo-v2-pro-free" )
154+ model = strings .TrimPrefix (model , "opencode/" )
155+ return NewOpenCodeCLI (OpenCodeCLIConfig {
156+ Model : model ,
157+ }), nil
158+
148159 default :
149160 baseURL := os .Getenv ("ITERATE_BASE_URL" )
150161 if baseURL == "" {
0 commit comments