diff --git a/README.md b/README.md index 7487a968ead6c5d4bff1005178cff3930265a778..f4159372732799f90d865ba27d11f00afd5385ed 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,7 @@ That said, you can also set environment variables for preferred providers. | `CEREBRAS_API_KEY` | Cerebras | | `OPENROUTER_API_KEY` | OpenRouter | | `IONET_API_KEY` | io.net | +| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) | | `GROQ_API_KEY` | Groq | | `AVIAN_API_KEY` | Avian | | `OPENCODE_API_KEY` | OpenCode Zen & Go | diff --git a/go.mod b/go.mod index f4c943f054ed96dd87e26a953a3ba79cf975547e..0a2f5504d49db03e2c64f09ac34a08c1a4485f3f 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.3 require ( charm.land/bubbles/v2 v2.1.0 charm.land/bubbletea/v2 v2.0.6 - charm.land/catwalk v0.40.4 + charm.land/catwalk v0.41.0 charm.land/fang/v2 v2.0.1 charm.land/fantasy v0.25.0 charm.land/glamour/v2 v2.0.0 diff --git a/go.sum b/go.sum index f546eccf3663c0d3bb2612a08dcf2d72383964cf..cbda3f3010c5b05ac4e70cc1487bbc95dbec1d32 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g= charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY= charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo= charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g= -charm.land/catwalk v0.40.4 h1:rVMn+bzrrqRZjT2MGExeyd4ziqCCVAnRCMNp1A2aaKg= -charm.land/catwalk v0.40.4/go.mod h1:LmMFJdRqF5F7qKa+xqD9SBq7tph7L98GU3ZFa1TxftA= +charm.land/catwalk v0.41.0 h1:rGeGrEJLFIFqz+glpCD4ICTo2PzL1GMFqGN+jpQn7O4= +charm.land/catwalk v0.41.0/go.mod h1:LmMFJdRqF5F7qKa+xqD9SBq7tph7L98GU3ZFa1TxftA= charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY= charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII= charm.land/fantasy v0.25.0 h1:oXOWY1ivmTSnhYGzAolscF8zKtavWZyBWv0LHRSwN5Q= diff --git a/internal/agent/coordinator.go b/internal/agent/coordinator.go index f3703fc3099cf3b94baa9682fa48c1b1295d12a3..2b750a1c29d4f7ef98cb3900c886901683e19eb2 100644 --- a/internal/agent/coordinator.go +++ b/internal/agent/coordinator.go @@ -392,6 +392,10 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy. "type": "disabled", } } + case string(catwalk.InferenceProviderAlibabaSingapore): + if model.CatwalkCfg.CanReason { + extraBody["enable_thinking"] = model.ModelCfg.Think + } } mergedOptions["extra_body"] = extraBody diff --git a/internal/config/config.go b/internal/config/config.go index 002595b6f774ff4784863f180c4b8a7f3d478095..c3895602740c1a9d4b0874bf925bf04b810c317b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -745,6 +745,13 @@ func (c *ProviderConfig) TestConnection(resolver VariableResolver) error { case catwalk.InferenceProviderMiniMax, catwalk.InferenceProviderMiniMaxChina: // NOTE: MiniMax has no good endpoint we can use to validate the API key. return nil + case catwalk.InferenceProviderAlibabaSingapore: + // NOTE: Alibaba has no good endpoint we can use to validate the API key. + // Let's at least check the pattern. + if !strings.HasPrefix(apiKey, "sk-") { + return fmt.Errorf("invalid API key format for provider %s", c.ID) + } + return nil } switch c.Type {