on main help sign in
feat: add aliababa (singapore) provider (#2949)

* Catwalk PR: https://github.com/charmbracelet/catwalk/pull/282 * Closes #2353 * Closes #2544

commit4882cbc015577578d61ac90b4393fa28ae2633c6 authorAndrey Nering <andreynering@users.noreply.github.com> dateMon 18 May 2026, 16:40 (5 months ago) parent0bbc8a8
5 files changed+15−3
README.md+1 go.mod+1−1 go.sum+2−2 internal/agent/coordinator.go+4 internal/config/config.go+7
README.md+1
@@ -193,6 +193,7 @@ That said, you can also set environment variables for preferred providers.
193193| `CEREBRAS_API_KEY` | Cerebras |
194194| `OPENROUTER_API_KEY` | OpenRouter |
195195| `IONET_API_KEY` | io.net |
196+| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) |
196197| `GROQ_API_KEY` | Groq |
197198| `AVIAN_API_KEY` | Avian |
198199| `OPENCODE_API_KEY` | OpenCode Zen & Go |
go.mod+1−1
@@ -5,7 +5,7 @@ go 1.26.3
55require (
66 charm.land/bubbles/v2 v2.1.0
77 charm.land/bubbletea/v2 v2.0.6
8− charm.land/catwalk v0.40.4
8+ charm.land/catwalk v0.41.0
99 charm.land/fang/v2 v2.0.1
1010 charm.land/fantasy v0.25.0
1111 charm.land/glamour/v2 v2.0.0
go.sum+2−2
@@ -2,8 +2,8 @@ charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
22charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
33charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo=
44charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g=
5−charm.land/catwalk v0.40.4 h1:rVMn+bzrrqRZjT2MGExeyd4ziqCCVAnRCMNp1A2aaKg=
6−charm.land/catwalk v0.40.4/go.mod h1:LmMFJdRqF5F7qKa+xqD9SBq7tph7L98GU3ZFa1TxftA=
5+charm.land/catwalk v0.41.0 h1:rGeGrEJLFIFqz+glpCD4ICTo2PzL1GMFqGN+jpQn7O4=
6+charm.land/catwalk v0.41.0/go.mod h1:LmMFJdRqF5F7qKa+xqD9SBq7tph7L98GU3ZFa1TxftA=
77charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
88charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
99charm.land/fantasy v0.25.0 h1:oXOWY1ivmTSnhYGzAolscF8zKtavWZyBWv0LHRSwN5Q=
internal/agent/coordinator.go+4
@@ -392,6 +392,10 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
392392 "type": "disabled",
393393 }
394394 }
395+ case string(catwalk.InferenceProviderAlibabaSingapore):
396+ if model.CatwalkCfg.CanReason {
397+ extraBody["enable_thinking"] = model.ModelCfg.Think
398+ }
395399 }
396400
397401 mergedOptions["extra_body"] = extraBody
internal/config/config.go+7
@@ -745,6 +745,13 @@ func (c *ProviderConfig) TestConnection(resolver VariableResolver) error {
745745 case catwalk.InferenceProviderMiniMax, catwalk.InferenceProviderMiniMaxChina:
746746 // NOTE: MiniMax has no good endpoint we can use to validate the API key.
747747 return nil
748+ case catwalk.InferenceProviderAlibabaSingapore:
749+ // NOTE: Alibaba has no good endpoint we can use to validate the API key.
750+ // Let's at least check the pattern.
751+ if !strings.HasPrefix(apiKey, "sk-") {
752+ return fmt.Errorf("invalid API key format for provider %s", c.ID)
753+ }
754+ return nil
748755 }
749756
750757 switch c.Type {