@@ -72,6 +72,11 @@ var copilotResponsesModels = map[string]bool{
"gpt-5-mini": true,
}
+// OpenCode models that user Anthropic Messages API instead of Chat Completions.
+var opencodeMessagesModels = map[string]bool{
+ "qwen3.7-max": true,
+}
+
type Coordinator interface {
// INFO: (kujtim) this is not used yet we will use this when we have multiple agents
// SetMainAgent(string)
@@ -791,7 +796,8 @@ func (c *coordinator) buildOpenaiCompatProvider(baseURL, apiKey string, headers
// Set HTTP client based on provider and debug mode.
var httpClient *http.Client
- if providerID == string(catwalk.InferenceProviderCopilot) {
+ switch providerID {
+ case string(catwalk.InferenceProviderCopilot):
opts = append(
opts,
openaicompat.WithUseResponsesAPI(),
@@ -800,7 +806,8 @@ func (c *coordinator) buildOpenaiCompatProvider(baseURL, apiKey string, headers
}),
)
httpClient = copilot.NewClient(isSubAgent, c.cfg.Config().Options.Debug)
- } else if c.cfg.Config().Options.Debug {
+ }
+ if httpClient == nil && c.cfg.Config().Options.Debug {
httpClient = log.NewHTTPClient()
}
if httpClient != nil {
@@ -929,6 +936,14 @@ func (c *coordinator) buildProvider(providerCfg config.ProviderConfig, model con
apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
+ switch providerCfg.ID {
+ case string(catwalk.InferenceProviderOpenCodeGo), string(catwalk.InferenceProviderOpenCodeZen):
+ if opencodeMessagesModels[model.Model] {
+ baseURL = strings.TrimSuffix(baseURL, "/v1")
+ return c.buildAnthropicProvider(baseURL, apiKey, headers, providerCfg.ID)
+ }
+ }
+
switch providerCfg.Type {
case openai.Name:
return c.buildOpenaiProvider(baseURL, apiKey, headers)