From e2fa73044a50202efab42eb731af42751ffc2c4e Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Tue, 26 Aug 2025 06:33:21 -0400 Subject: [PATCH] chore: change the provider interface --- internal/ai/examples/agent/main.go | 6 +- internal/ai/examples/simple/main.go | 8 +- internal/ai/examples/stream/main.go | 6 +- .../examples/streaming-agent-simple/main.go | 6 +- internal/ai/examples/streaming-agent/main.go | 18 ++-- internal/ai/provider.go | 2 +- internal/ai/providers/anthropic.go | 21 ++--- internal/ai/providers/openai.go | 4 +- internal/ai/providers/openai_test.go | 86 +++++++++---------- 9 files changed, 88 insertions(+), 69 deletions(-) diff --git a/internal/ai/examples/agent/main.go b/internal/ai/examples/agent/main.go index 99e8663c622d0c7795c71ef3320e88cc0ed9d28e..6a53daa8bccd49383aa90dcac5675d641b8302a9 100644 --- a/internal/ai/examples/agent/main.go +++ b/internal/ai/examples/agent/main.go @@ -13,7 +13,11 @@ func main() { provider := providers.NewOpenAIProvider( providers.WithOpenAIApiKey(os.Getenv("OPENAI_API_KEY")), ) - model := provider.LanguageModel("gpt-4o") + model, err := provider.LanguageModel("gpt-4o") + if err != nil { + fmt.Println(err) + return + } // Create weather tool using the new type-safe API type WeatherInput struct { diff --git a/internal/ai/examples/simple/main.go b/internal/ai/examples/simple/main.go index 05cee92960ef36c031d98a30d50f849468dbed2c..a8136ee7e1870b54430cf8a5c8dca305c9ade688 100644 --- a/internal/ai/examples/simple/main.go +++ b/internal/ai/examples/simple/main.go @@ -10,8 +10,12 @@ import ( ) func main() { - provider := providers.NewOpenAIProvider(providers.WithOpenAIApiKey(os.Getenv("OPENAI_API_KEY"))) - model := provider.LanguageModel("gpt-4o") + provider := providers.NewAnthropicProvider(providers.WithAnthropicAPIKey(os.Getenv("ANTHROPIC_API_KEY"))) + model, err := provider.LanguageModel("claude-sonnet-4-20250514") + if err != nil { + fmt.Println(err) + return + } response, err := model.Generate(context.Background(), ai.Call{ Prompt: ai.Prompt{ diff --git a/internal/ai/examples/stream/main.go b/internal/ai/examples/stream/main.go index 962f1ac14d6a52cd2362ffe764f567aaa5cd4917..56eb0930dec873272913908ab5286d71738f863e 100644 --- a/internal/ai/examples/stream/main.go +++ b/internal/ai/examples/stream/main.go @@ -12,7 +12,11 @@ import ( func main() { provider := providers.NewOpenAIProvider(providers.WithOpenAIApiKey(os.Getenv("OPENAI_API_KEY"))) - model := provider.LanguageModel("gpt-4o") + model, err := provider.LanguageModel("gpt-4o") + if err != nil { + fmt.Println(err) + return + } stream, err := model.Stream(context.Background(), ai.Call{ Prompt: ai.Prompt{ diff --git a/internal/ai/examples/streaming-agent-simple/main.go b/internal/ai/examples/streaming-agent-simple/main.go index 6bc548e154f14ecdc66a877b9cd4ad7fbac24ff3..362949fe02bc04d7232a2decc6a31291e925d96b 100644 --- a/internal/ai/examples/streaming-agent-simple/main.go +++ b/internal/ai/examples/streaming-agent-simple/main.go @@ -21,7 +21,11 @@ func main() { provider := providers.NewOpenAIProvider( providers.WithOpenAIApiKey(apiKey), ) - model := provider.LanguageModel("gpt-4o-mini") + model, err := provider.LanguageModel("gpt-4o-mini") + if err != nil { + fmt.Println(err) + return + } // Create echo tool using the new type-safe API type EchoInput struct { diff --git a/internal/ai/examples/streaming-agent/main.go b/internal/ai/examples/streaming-agent/main.go index 2d087cf2f6ac849f3863486bd3153bb6dfc7158e..efb80d57035c54e886cf35f1dcac8785670d3419 100644 --- a/internal/ai/examples/streaming-agent/main.go +++ b/internal/ai/examples/streaming-agent/main.go @@ -12,10 +12,10 @@ import ( func main() { // Check for API key - apiKey := os.Getenv("OPENAI_API_KEY") + apiKey := os.Getenv("ANTHROPIC_API_KEY") if apiKey == "" { - fmt.Println("❌ Please set OPENAI_API_KEY environment variable") - fmt.Println(" export OPENAI_API_KEY=your_api_key_here") + fmt.Println("❌ Please set ANTHROPIC_API_KEY environment variable") + fmt.Println(" export ANTHROPIC_API_KEY=your_api_key_here") os.Exit(1) } @@ -24,10 +24,12 @@ func main() { fmt.Println() // Create OpenAI provider and model - provider := providers.NewOpenAIProvider( - providers.WithOpenAIApiKey(apiKey), - ) - model := provider.LanguageModel("gpt-4o-mini") // Using mini for faster/cheaper responses + provider := providers.NewAnthropicProvider(providers.WithAnthropicAPIKey(os.Getenv("ANTHROPIC_API_KEY"))) + model, err := provider.LanguageModel("claude-sonnet-4-20250514") + if err != nil { + fmt.Println(err) + return + } // Define input types for type-safe tools type WeatherInput struct { @@ -194,7 +196,7 @@ func main() { OnSource: func(source ai.SourceContent) { fmt.Printf("📚 Source: %s (%s)\n", source.Title, source.URL) }, - OnStreamFinish: func(usage ai.Usage, finishReason ai.FinishReason, providerMetadata ai.ProviderOptions) { + OnStreamFinish: func(usage ai.Usage, finishReason ai.FinishReason, providerMetadata ai.ProviderMetadata) { fmt.Printf("📊 Stream finished (reason: %s, tokens: %d)\n", finishReason, usage.TotalTokens) }, OnStreamError: func(err error) { diff --git a/internal/ai/provider.go b/internal/ai/provider.go index b6d0e16a09c7c78646c4273cd9690f23f4199ab8..c3212127e3eb0b66af6ee5ab8f3ef43f47a034f9 100644 --- a/internal/ai/provider.go +++ b/internal/ai/provider.go @@ -1,6 +1,6 @@ package ai type Provider interface { - LanguageModel(modelID string) LanguageModel + LanguageModel(modelID string) (LanguageModel, error) // TODO: add other model types when needed } diff --git a/internal/ai/providers/anthropic.go b/internal/ai/providers/anthropic.go index 2fd2147a681c22244e066a1f26b20f274120c863..1168a291cf413493088d38fb1fbe3582e44f95ff 100644 --- a/internal/ai/providers/anthropic.go +++ b/internal/ai/providers/anthropic.go @@ -16,14 +16,14 @@ import ( "github.com/charmbracelet/crush/internal/ai" ) -type AnthropicThinking struct { - BudgetTokens int64 `json:"budget_tokens"` +type AnthropicProviderOptions struct { + SendReasoning *bool `json:"send_reasoning,omitempty"` + Thinking *AnthropicThinkingProviderOption `json:"thinking,omitempty"` + DisableParallelToolUse *bool `json:"disable_parallel_tool_use,omitempty"` } -type AnthropicProviderOptions struct { - SendReasoning *bool `json:"send_reasoning,omitempty"` - Thinking *AnthropicThinking `json:"thinking,omitempty"` - DisableParallelToolUse *bool `json:"disable_parallel_tool_use,omitempty"` +type AnthropicThinkingProviderOption struct { + BudgetTokens int64 `json:"budget_tokens"` } type AnthropicReasoningMetadata struct { @@ -62,7 +62,7 @@ func NewAnthropicProvider(opts ...AnthropicOption) ai.Provider { o(&options) } if options.baseURL == "" { - options.baseURL = "https://api.anthropic.com/v1" + options.baseURL = "https://api.anthropic.com" } if options.name == "" { @@ -104,7 +104,7 @@ func WithAnthropicHTTPClient(client option.HTTPClient) AnthropicOption { } } -func (a *anthropicProvider) LanguageModel(modelID string) ai.LanguageModel { +func (a *anthropicProvider) LanguageModel(modelID string) (ai.LanguageModel, error) { anthropicClientOptions := []option.RequestOption{} if a.options.apiKey != "" { anthropicClientOptions = append(anthropicClientOptions, option.WithAPIKey(a.options.apiKey)) @@ -125,7 +125,7 @@ func (a *anthropicProvider) LanguageModel(modelID string) ai.LanguageModel { provider: fmt.Sprintf("%s.messages", a.options.name), providerOptions: a.options, client: anthropic.NewClient(anthropicClientOptions...), - } + }, nil } type anthropicLanguageModel struct { @@ -176,6 +176,7 @@ func (a anthropicLanguageModel) prepareParams(call ai.Call) (*anthropic.MessageN params.System = systemBlocks params.Messages = messages params.Model = anthropic.Model(a.modelID) + params.MaxTokens = 4096 if call.MaxOutputTokens != nil { params.MaxTokens = *call.MaxOutputTokens @@ -364,7 +365,7 @@ func toAnthropicTools(tools []ai.Tool, toolChoice *ai.ToolChoice, disableParalle anthropicTool.CacheControl = anthropic.NewCacheControlEphemeralParam() } anthropicTools = append(anthropicTools, anthropic.ToolUnionParam{OfTool: &anthropicTool}) - + continue } // TODO: handle provider tool calls warnings = append(warnings, ai.CallWarning{ diff --git a/internal/ai/providers/openai.go b/internal/ai/providers/openai.go index 00e190acd38b2bf0e6f79d08a0a5fad722c068d9..5a70299e8b24441062c79332fdc96f8994f869f5 100644 --- a/internal/ai/providers/openai.go +++ b/internal/ai/providers/openai.go @@ -133,7 +133,7 @@ func WithOpenAIHttpClient(client option.HTTPClient) OpenAIOption { } // LanguageModel implements ai.Provider. -func (o *openAIProvider) LanguageModel(modelID string) ai.LanguageModel { +func (o *openAIProvider) LanguageModel(modelID string) (ai.LanguageModel, error) { openaiClientOptions := []option.RequestOption{} if o.options.apiKey != "" { openaiClientOptions = append(openaiClientOptions, option.WithAPIKey(o.options.apiKey)) @@ -155,7 +155,7 @@ func (o *openAIProvider) LanguageModel(modelID string) ai.LanguageModel { provider: fmt.Sprintf("%s.chat", o.options.name), providerOptions: o.options, client: openai.NewClient(openaiClientOptions...), - } + }, nil } type openAILanguageModel struct { diff --git a/internal/ai/providers/openai_test.go b/internal/ai/providers/openai_test.go index 34f54c5a4602d3008fd354fa76aa6510240d7de6..9ebc349a707ec265b65c476fa768d4411272fd94 100644 --- a/internal/ai/providers/openai_test.go +++ b/internal/ai/providers/openai_test.go @@ -815,7 +815,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -847,7 +847,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -871,7 +871,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -911,7 +911,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -937,7 +937,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -973,7 +973,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -997,7 +997,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1021,7 +1021,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1053,7 +1053,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1097,7 +1097,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-mini") + model, _ := provider.LanguageModel("o1-mini") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1137,7 +1137,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o") + model, _ := provider.LanguageModel("gpt-4o") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1177,7 +1177,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1249,7 +1249,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1307,7 +1307,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1349,7 +1349,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-mini") + model, _ := provider.LanguageModel("gpt-4o-mini") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1384,7 +1384,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-mini") + model, _ := provider.LanguageModel("gpt-4o-mini") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1411,7 +1411,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1459,7 +1459,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1503,7 +1503,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1530,7 +1530,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1570,7 +1570,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1616,7 +1616,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1656,7 +1656,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1700,7 +1700,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1740,7 +1740,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1778,7 +1778,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-search-preview") + model, _ := provider.LanguageModel("gpt-4o-search-preview") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1812,7 +1812,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o3-mini") + model, _ := provider.LanguageModel("o3-mini") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1850,7 +1850,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-mini") + model, _ := provider.LanguageModel("gpt-4o-mini") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1885,7 +1885,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-mini") + model, _ := provider.LanguageModel("gpt-4o-mini") _, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -1923,7 +1923,7 @@ func TestDoGenerate(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") result, err := model.Generate(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2232,7 +2232,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2288,7 +2288,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2374,7 +2374,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2413,7 +2413,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2454,7 +2454,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2502,7 +2502,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2552,7 +2552,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2595,7 +2595,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2639,7 +2639,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-3.5-turbo") + model, _ := provider.LanguageModel("gpt-3.5-turbo") _, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2687,7 +2687,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o3-mini") + model, _ := provider.LanguageModel("o3-mini") _, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2731,7 +2731,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("gpt-4o-mini") + model, _ := provider.LanguageModel("gpt-4o-mini") _, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2776,7 +2776,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt, @@ -2822,7 +2822,7 @@ func TestDoStream(t *testing.T) { WithOpenAIApiKey("test-api-key"), WithOpenAIBaseURL(server.server.URL), ) - model := provider.LanguageModel("o1-preview") + model, _ := provider.LanguageModel("o1-preview") stream, err := model.Stream(context.Background(), ai.Call{ Prompt: testPrompt,