mirror of
https://github.com/Twigpine/zero.git
synced 2026-11-08 09:49:34 -10:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e31b7f15b |
No files matched your search
@@ -590,9 +590,17 @@ func applyProviderEnv(cfg *FileConfig, providerKind ProviderKind, env envProfile
|
||||
if profile.Name == "" {
|
||||
profile.Name = string(providerKind)
|
||||
}
|
||||
// A non-official baseURL from the environment signals a proxy/gateway, so promote
|
||||
// the first-party kind to its -compatible transport (which accepts a custom URL).
|
||||
// Env-only by design: a custom baseURL in a project config.json is left as-is and
|
||||
// rejected by Resolve, so an untrusted project can't redirect a first-party key to
|
||||
// another host.
|
||||
if providerKind == ProviderKindOpenAI && baseURL != "" && !isOfficialOpenAIBaseURL(baseURL) {
|
||||
profile.ProviderKind = ProviderKindOpenAICompatible
|
||||
}
|
||||
if providerKind == ProviderKindAnthropic && baseURL != "" && !isOfficialAnthropicBaseURL(baseURL) {
|
||||
profile.ProviderKind = ProviderKindAnthropicCompat
|
||||
}
|
||||
// When the env supplies only credentials (no baseURL) for a provider name that
|
||||
// already exists, don't force the standard transport kind — a same-named
|
||||
// openai-compatible/anthropic-compatible proxy or gateway must keep its kind.
|
||||
|
||||
@@ -617,6 +617,35 @@ func TestResolveUsesOpenAIEnvFallback(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveUsesAnthropicEnvBaseURLAsCompatible(t *testing.T) {
|
||||
// ANTHROPIC_BASE_URL pointing at a proxy/gateway must resolve to an
|
||||
// anthropic-compatible provider (mirroring OPENAI_BASE_URL), not the "requires
|
||||
// official baseURL" rejection — issue #479. The env is user-controlled, so a
|
||||
// custom URL there is a deliberate gateway choice, unlike a project config.json.
|
||||
resolved, err := Resolve(ResolveOptions{
|
||||
Env: map[string]string{
|
||||
"ANTHROPIC_API_KEY": "sk-ant-env",
|
||||
"ANTHROPIC_BASE_URL": "https://gateway.example/anthropic",
|
||||
"ANTHROPIC_MODEL": "claude-custom",
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Resolve() error = %v", err)
|
||||
}
|
||||
if resolved.ActiveProvider != "anthropic" {
|
||||
t.Fatalf("ActiveProvider = %q, want anthropic", resolved.ActiveProvider)
|
||||
}
|
||||
if resolved.Provider.ProviderKind != ProviderKindAnthropicCompat {
|
||||
t.Fatalf("ProviderKind = %q, want anthropic-compatible", resolved.Provider.ProviderKind)
|
||||
}
|
||||
if resolved.Provider.BaseURL != "https://gateway.example/anthropic" {
|
||||
t.Fatalf("BaseURL = %q, want gateway URL", resolved.Provider.BaseURL)
|
||||
}
|
||||
if resolved.Provider.APIKey != "sk-ant-env" || resolved.Provider.Model != "claude-custom" {
|
||||
t.Fatalf("Provider = %#v, want env credentials/model", resolved.Provider)
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveUsesOpenAIAPIKeyOnlyWithDefaultModel(t *testing.T) {
|
||||
resolved, err := Resolve(ResolveOptions{
|
||||
Env: map[string]string{
|
||||
|
||||
Reference in new issue
Block a user