on main help sign in
Merge pull request #248 from charmbracelet/fix-azure
54f6cbeKujtim Hoxha
internal/config/load.go+11
@@ -188,6 +188,17 @@ func (c *Config) configureProviders(env env.Env, resolver VariableResolver, know
188 }
188 }
189 prepared.ExtraParams["project"] = env.Get("GOOGLE_CLOUD_PROJECT")
189 prepared.ExtraParams["project"] = env.Get("GOOGLE_CLOUD_PROJECT")
190 prepared.ExtraParams["location"] = env.Get("GOOGLE_CLOUD_LOCATION")
190 prepared.ExtraParams["location"] = env.Get("GOOGLE_CLOUD_LOCATION")
191+ case provider.InferenceProviderAzure:
192+ endpoint, err := resolver.ResolveValue(p.APIEndpoint)
193+ if err != nil || endpoint == "" {
194+ if configExists {
195+ slog.Warn("Skipping Azure provider due to missing API endpoint", "provider", p.ID, "error", err)
196+ delete(c.Providers, string(p.ID))
197+ }
198+ continue
199+ }
200+ prepared.BaseURL = endpoint
201+ prepared.ExtraParams["apiVersion"] = env.Get("AZURE_OPENAI_API_VERSION")
191 case provider.InferenceProviderBedrock:
202 case provider.InferenceProviderBedrock:
192 if !hasAWSCredentials(env) {
203 if !hasAWSCredentials(env) {
193 if configExists {
204 if configExists {
internal/llm/provider/azure.go+5−19
@@ -1,9 +1,6 @@
1package provider
1package provider
2
2
3import (
3import (
4− "os"
5−
6− "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
7 "github.com/openai/openai-go"
4 "github.com/openai/openai-go"
8 "github.com/openai/openai-go/azure"
5 "github.com/openai/openai-go/azure"
9 "github.com/openai/openai-go/option"
6 "github.com/openai/openai-go/option"
@@ -16,27 +13,16 @@ type azureClient struct {
16type AzureClient ProviderClient
13type AzureClient ProviderClient
17
14
18func newAzureClient(opts providerClientOptions) AzureClient {
15func newAzureClient(opts providerClientOptions) AzureClient {
19− endpoint := os.Getenv("AZURE_OPENAI_ENDPOINT") // ex: https://foo.openai.azure.com
16+ apiVersion := opts.extraParams["apiVersion"]
20− apiVersion := os.Getenv("AZURE_OPENAI_API_VERSION") // ex: 2025-04-01-preview
17+ if apiVersion == "" {
21−
18+ apiVersion = "2025-01-01-preview"
22− if endpoint == "" || apiVersion == "" {
23− return &azureClient{openaiClient: newOpenAIClient(opts).(*openaiClient)}
24 }
19 }
25
20
26 reqOpts := []option.RequestOption{
21 reqOpts := []option.RequestOption{
27− azure.WithEndpoint(endpoint, apiVersion),
22+ azure.WithEndpoint(opts.baseURL, apiVersion),
28− }
29−
30− if opts.apiKey != "" || os.Getenv("AZURE_OPENAI_API_KEY") != "" {
31− key := opts.apiKey
32− if key == "" {
33− key = os.Getenv("AZURE_OPENAI_API_KEY")
34− }
35− reqOpts = append(reqOpts, azure.WithAPIKey(key))
36− } else if cred, err := azidentity.NewDefaultAzureCredential(nil); err == nil {
37− reqOpts = append(reqOpts, azure.WithTokenCredential(cred))
38 }
23 }
39
24
25+ reqOpts = append(reqOpts, azure.WithAPIKey(opts.apiKey))
40 base := &openaiClient{
26 base := &openaiClient{
41 providerOptions: opts,
27 providerOptions: opts,
42 client: openai.NewClient(reqOpts...),
28 client: openai.NewClient(reqOpts...),