From 1568c97b199d44dc6794f3ce7ba0e82caf4310ec Mon Sep 17 00:00:00 2001 From: Calum Murray Date: Wed, 18 Mar 2026 13:45:15 -0400 Subject: [PATCH 01/32] fix(anthropic): anthropic with vertex works with service account json keys (#157) Signed-off-by: Calum Murray --- providers/anthropic/anthropic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 1a7004205..b1bcee24c 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -30,6 +30,8 @@ const ( Name = "anthropic" // DefaultURL is the default URL for the Anthropic API. DefaultURL = "https://api.anthropic.com" + // VertexAuthScope is the auth scope required for vertex auth if using a Service Account JSON file (e.g. GOOGLE_APPLICATION_CREDENTIALS). + VertexAuthScope = "https://www.googleapis.com/auth/cloud-platform" ) type options struct { @@ -171,7 +173,7 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L credentials = &google.Credentials{TokenSource: &googleDummyTokenSource{}} } else { var err error - credentials, err = google.FindDefaultCredentials(ctx) + credentials, err = google.FindDefaultCredentials(ctx, VertexAuthScope) if err != nil { return nil, err } From d749d13e404a9a88096261b5817084ebab7ddeee Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 18 Mar 2026 15:02:38 -0300 Subject: [PATCH 02/32] fix(anthropic): ToolChoiceNone should send tool_choice:{type:"none"} to API (#178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Anthropic provider's toTools function was returning nil for anthropicToolChoice when ToolChoiceNone was set, which meant tool_choice was never included in the API request. The API defaults to "auto", so the model could still make tool calls. Now properly constructs ToolChoiceUnionParam with OfNone set using anthropic.NewToolChoiceNoneParam(). Also adds test coverage for ToolChoiceNone. * Closes #177 💘 Generated with Crush Assisted-by: Kimi K2.5 via Crush --- providers/anthropic/anthropic.go | 5 ++++- providers/anthropic/anthropic_test.go | 31 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index b1bcee24c..25ac81dab 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -638,7 +638,10 @@ func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolCho }, } case fantasy.ToolChoiceNone: - return anthropicTools, anthropicToolChoice, warnings + none := anthropic.NewToolChoiceNoneParam() + anthropicToolChoice = &anthropic.ToolChoiceUnionParam{ + OfNone: &none, + } default: anthropicToolChoice = &anthropic.ToolChoiceUnionParam{ OfTool: &anthropic.ToolChoiceToolParam{ diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 51adb7c33..5f137a78b 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -1333,3 +1333,34 @@ func TestStream_WebSearchResponse(t *testing.T) { require.NotEmpty(t, textDeltas, "should have text deltas") require.Equal(t, "Here are the results.", textDeltas[0].Delta) } + +func TestGenerate_ToolChoiceNone(t *testing.T) { + t.Parallel() + + server, calls := newAnthropicJSONServer(mockAnthropicGenerateResponse()) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + toolChoiceNone := fantasy.ToolChoiceNone + _, err = model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{ + WebSearchTool(nil), + }, + ToolChoice: &toolChoiceNone, + }) + require.NoError(t, err) + + call := awaitAnthropicCall(t, calls) + toolChoice, ok := call.body["tool_choice"].(map[string]any) + require.True(t, ok, "request body should have tool_choice") + require.Equal(t, "none", toolChoice["type"], "tool_choice should be 'none'") +} From 09d2b743f26656d19fefb17b26c5da3dc46a1b12 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 18 Mar 2026 15:20:22 -0300 Subject: [PATCH 03/32] feat: support `text/*` files (#100) --- providers/anthropic/anthropic.go | 22 +++++++++++-------- providers/openai/language_model_hooks.go | 7 ++++++ .../openaicompat/language_model_hooks.go | 7 ++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 25ac81dab..5c7b1d4ed 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -726,16 +726,20 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl continue } // TODO: handle other file types - if !strings.HasPrefix(file.MediaType, "image/") { - continue - } - - base64Encoded := base64.StdEncoding.EncodeToString(file.Data) - imageBlock := anthropic.NewImageBlockBase64(file.MediaType, base64Encoded) - if cacheControl != nil { - imageBlock.OfImage.CacheControl = anthropic.NewCacheControlEphemeralParam() + switch { + case strings.HasPrefix(file.MediaType, "image/"): + base64Encoded := base64.StdEncoding.EncodeToString(file.Data) + imageBlock := anthropic.NewImageBlockBase64(file.MediaType, base64Encoded) + if cacheControl != nil { + imageBlock.OfImage.CacheControl = anthropic.NewCacheControlEphemeralParam() + } + anthropicContent = append(anthropicContent, imageBlock) + case strings.HasPrefix(file.MediaType, "text/"): + documentBlock := anthropic.NewDocumentBlock(anthropic.PlainTextSourceParam{ + Data: string(file.Data), + }) + anthropicContent = append(anthropicContent, documentBlock) } - anthropicContent = append(anthropicContent, imageBlock) } } } else if msg.Role == fantasy.MessageRoleTool { diff --git a/providers/openai/language_model_hooks.go b/providers/openai/language_model_hooks.go index 101248835..b3e94ceef 100644 --- a/providers/openai/language_model_hooks.go +++ b/providers/openai/language_model_hooks.go @@ -363,6 +363,13 @@ func DefaultToPrompt(prompt fantasy.Prompt, _, _ string) ([]openai.ChatCompletio } switch { + case strings.HasPrefix(filePart.MediaType, "text/"): + base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data) + documentBlock := openai.ChatCompletionContentPartFileFileParam{ + FileData: param.NewOpt(base64Encoded), + } + content = append(content, openai.FileContentPart(documentBlock)) + case strings.HasPrefix(filePart.MediaType, "image/"): // Handle image files base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data) diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index d11da4a1b..36c847e02 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -209,6 +209,13 @@ func ToPromptFunc(prompt fantasy.Prompt, _, _ string) ([]openaisdk.ChatCompletio } switch { + case strings.HasPrefix(filePart.MediaType, "text/"): + base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data) + documentBlock := openaisdk.ChatCompletionContentPartFileFileParam{ + FileData: param.NewOpt(base64Encoded), + } + content = append(content, openaisdk.FileContentPart(documentBlock)) + case strings.HasPrefix(filePart.MediaType, "image/"): // Handle image files base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data) From f910b4ccd720e76769683da0354c22619af0edfb Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 18 Mar 2026 15:49:18 -0300 Subject: [PATCH 04/32] feat(agent): allow empty prompt when messages exist (#179) Allow empty prompts when there are messages and no files to attach. The last message must be a user or tool message - this ensures the conversation state is valid for the LLM to respond. This addresses use cases where: - Generating from an existing conversation - Tool results were just returned and we want the LLM to respond Validation: - Error if empty prompt with no messages - Error if empty prompt with files (files need a user message) - Error if last message is assistant (nothing to respond to) - Allow if last message is user or tool Closes #54 Closes #59 Closes #103 Co-authored-by: Arun Barua Co-authored-by: Ruslan Mayer --- agent.go | 32 ++++++++++++++++++-- agent_test.go | 83 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 107 insertions(+), 8 deletions(-) diff --git a/agent.go b/agent.go index 6ec571c3b..08d488770 100644 --- a/agent.go +++ b/agent.go @@ -11,6 +11,7 @@ import ( "sync" "charm.land/fantasy/schema" + "github.com/charmbracelet/x/exp/slice" ) // StepResult represents the result of a single step in an agent execution. @@ -1019,8 +1020,33 @@ func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []Agen } func (a *agent) createPrompt(system, prompt string, messages []Message, files ...FilePart) (Prompt, error) { + // Validation: empty prompt is only allowed when there are messages, + // no files to attach, and the last message is a user or tool message. if prompt == "" { - return nil, &Error{Title: "invalid argument", Message: "prompt can't be empty"} + lastMessage, hasMessages := slice.Last(messages) + + if !hasMessages { + return nil, &Error{ + Title: "invalid argument", + Message: "prompt can't be empty when there are no messages", + } + } + + if len(files) > 0 { + return nil, &Error{ + Title: "invalid argument", + Message: "prompt can't be empty when there are files", + } + } + + switch lastMessage.Role { + case MessageRoleUser, MessageRoleTool: + default: + return nil, &Error{ + Title: "invalid argument", + Message: "prompt can't be empty when the last message is not a user or tool message", + } + } } var preparedPrompt Prompt @@ -1029,7 +1055,9 @@ func (a *agent) createPrompt(system, prompt string, messages []Message, files .. preparedPrompt = append(preparedPrompt, NewSystemMessage(system)) } preparedPrompt = append(preparedPrompt, messages...) - preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...)) + if prompt != "" { + preparedPrompt = append(preparedPrompt, NewUserMessage(prompt, files...)) + } return preparedPrompt, nil } diff --git a/agent_test.go b/agent_test.go index f6df57987..929094b21 100644 --- a/agent_test.go +++ b/agent_test.go @@ -523,20 +523,91 @@ func TestAgent_Generate_BasicText(t *testing.T) { require.Equal(t, int64(13), result.TotalUsage.TotalTokens) } -// Test empty prompt error +// Test empty prompt validation func TestAgent_Generate_EmptyPrompt(t *testing.T) { t.Parallel() model := &mockLanguageModel{} agent := NewAgent(model) - result, err := agent.Generate(context.Background(), AgentCall{ - Prompt: "", // Empty prompt should cause error + t.Run("fails without messages", func(t *testing.T) { + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "", + }) + require.Error(t, err) + require.Nil(t, result) + require.Contains(t, err.Error(), "prompt can't be empty when there are no messages") + }) + + t.Run("fails with files even if messages exist", func(t *testing.T) { + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "", + Messages: []Message{ + {Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}}, + }, + Files: []FilePart{{Filename: "test.txt", Data: []byte("test"), MediaType: "text/plain"}}, + }) + require.Error(t, err) + require.Nil(t, result) + require.Contains(t, err.Error(), "prompt can't be empty when there are files") + }) + + t.Run("fails when last message is assistant", func(t *testing.T) { + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "", + Messages: []Message{ + {Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}}, + {Role: MessageRoleAssistant, Content: []MessagePart{TextPart{Text: "hi there"}}}, + }, + }) + require.Error(t, err) + require.Nil(t, result) + require.Contains(t, err.Error(), "prompt can't be empty when the last message is not a user or tool message") + }) + + t.Run("succeeds when last message is user", func(t *testing.T) { + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + return &Response{ + Content: []Content{TextContent{Text: "response"}}, + FinishReason: FinishReasonStop, + }, nil + }, + } + agent := NewAgent(model) + + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "", + Messages: []Message{ + {Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}}, + }, + }) + require.NoError(t, err) + require.NotNil(t, result) }) - require.Error(t, err) - require.Nil(t, result) - require.Contains(t, err.Error(), "invalid argument: prompt can't be empty") + t.Run("succeeds when last message is tool", func(t *testing.T) { + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + return &Response{ + Content: []Content{TextContent{Text: "response"}}, + FinishReason: FinishReasonStop, + }, nil + }, + } + agent := NewAgent(model) + + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "", + Messages: []Message{ + {Role: MessageRoleUser, Content: []MessagePart{TextPart{Text: "hello"}}}, + {Role: MessageRoleAssistant, Content: []MessagePart{ToolCallPart{ToolCallID: "call_1", ToolName: "test"}}}, + {Role: MessageRoleTool, Content: []MessagePart{ToolResultPart{ToolCallID: "call_1", Output: ToolResultOutputContentText{Text: "result"}}}}, + }, + }) + require.NoError(t, err) + require.NotNil(t, result) + }) } // Test with system prompt From d120cc3b2465f228fcc0d71ccf94886c8dab2d46 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 18 Mar 2026 17:09:27 -0300 Subject: [PATCH 05/32] v0.15.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index a803cc227..a55105169 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.14.0 +0.15.0 From 6bb474f6bf4de7f5d6b868dffec729aef6c32dc9 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 11:57:03 -0300 Subject: [PATCH 06/32] fix: migrate the openai sdk to our internal fork The OpenAI SDK has a bug on dealing with SSE events. This was affected OpenRouter, but we made a workaround for it. See: * https://github.com/charmbracelet/fantasy/pull/166 * https://github.com/charmbracelet/fantasy/pull/169 We made a fix for the SDK, but it wasn't merged yet: * https://github.com/openai/openai-go/pull/621 In the meantime, an user reported that Avian has the same issue, but it's impossible for us to workaround it. Because of this, we had to fork the SDK. We're pinning the `fantasy` branch from our fork: * https://github.com/charmbracelet/openai-go/tree/fantasy --- go.mod | 2 +- go.sum | 4 ++-- providers/azure/azure.go | 4 ++-- providers/openai/call_useragent.go | 2 +- providers/openai/error.go | 2 +- providers/openai/language_model.go | 6 +++--- providers/openai/language_model_hooks.go | 6 +++--- providers/openai/openai.go | 4 ++-- providers/openai/openai_test.go | 2 +- providers/openai/provider_options.go | 2 +- providers/openai/responses_language_model.go | 8 ++++---- providers/openaicompat/language_model_hooks.go | 6 +++--- providers/openaicompat/openaicompat.go | 2 +- providers/openrouter/language_model_hooks.go | 4 ++-- providers/openrouter/openrouter.go | 2 +- providers/vercel/language_model_hooks.go | 4 ++-- providers/vercel/vercel.go | 2 +- 17 files changed, 31 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index 267a187aa..94fb309be 100644 --- a/go.mod +++ b/go.mod @@ -10,13 +10,13 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.32.12 github.com/aws/smithy-go v1.24.2 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab + github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 github.com/charmbracelet/x/json v0.2.0 github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 github.com/kaptinlin/jsonschema v0.7.5 - github.com/openai/openai-go/v3 v3.28.0 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 google.golang.org/genai v1.50.0 diff --git a/go.sum b/go.sum index 51b240077..787a55d49 100644 --- a/go.sum +++ b/go.sum @@ -90,6 +90,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab h1:J7XQLgl9sefgTnTGrmX3xqvp5o6MCiBzEjGv5igAlc4= github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab/go.mod h1:hqlYqR7uPKOKfnNeicUbZp0Ps0GeYFlKYtwh5HGDCx8= +github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZtyd1JyYy0h5adMm3tzpNyL857LWjuTRET6OhpY= +github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E= github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 h1:DTSZxdV9qQagD4iGcAt9RgaRBZtJl01bfKgdLzUzUPI= github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms= github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ= @@ -201,8 +203,6 @@ github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= -github.com/openai/openai-go/v3 v3.28.0 h1:2+FfrCVMdGXSQrBv1tLWtokm+BU7+3hJ/8rAHPQ63KM= -github.com/openai/openai-go/v3 v3.28.0/go.mod h1:cdufnVK14cWcT9qA1rRtrXx4FTRsgbDPW7Ia7SS5cZo= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= diff --git a/providers/azure/azure.go b/providers/azure/azure.go index 7435198dc..bec505cdb 100644 --- a/providers/azure/azure.go +++ b/providers/azure/azure.go @@ -8,8 +8,8 @@ import ( "charm.land/fantasy" "charm.land/fantasy/providers/openai" - "github.com/openai/openai-go/v3/azure" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go/azure" + "github.com/charmbracelet/openai-go/option" ) type options struct { diff --git a/providers/openai/call_useragent.go b/providers/openai/call_useragent.go index 34252e1ce..777a19d3f 100644 --- a/providers/openai/call_useragent.go +++ b/providers/openai/call_useragent.go @@ -3,7 +3,7 @@ package openai import ( "charm.land/fantasy" "charm.land/fantasy/providers/internal/httpheaders" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go/option" ) // callUARequestOptions returns per-request options that override the diff --git a/providers/openai/error.go b/providers/openai/error.go index 4d487d2ef..861b79eea 100644 --- a/providers/openai/error.go +++ b/providers/openai/error.go @@ -10,7 +10,7 @@ import ( "strings" "charm.land/fantasy" - "github.com/openai/openai-go/v3" + "github.com/charmbracelet/openai-go" ) var openaiContextPattern = regexp.MustCompile(`maximum context length is (\d+) tokens.*?(?:resulted in|requested) (\d+) tokens`) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 27eb61862..0679aa3f5 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -12,11 +12,11 @@ import ( "charm.land/fantasy" "charm.land/fantasy/object" "charm.land/fantasy/schema" + "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" + "github.com/charmbracelet/openai-go/shared" xjson "github.com/charmbracelet/x/json" "github.com/google/uuid" - "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" - "github.com/openai/openai-go/v3/shared" ) type languageModel struct { diff --git a/providers/openai/language_model_hooks.go b/providers/openai/language_model_hooks.go index b3e94ceef..34ed74c99 100644 --- a/providers/openai/language_model_hooks.go +++ b/providers/openai/language_model_hooks.go @@ -6,9 +6,9 @@ import ( "strings" "charm.land/fantasy" - "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" - "github.com/openai/openai-go/v3/shared" + "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" + "github.com/charmbracelet/openai-go/shared" ) // LanguageModelPrepareCallFunc is a function that prepares the call for the language model. diff --git a/providers/openai/openai.go b/providers/openai/openai.go index 88d0968b6..fb9e7838d 100644 --- a/providers/openai/openai.go +++ b/providers/openai/openai.go @@ -8,8 +8,8 @@ import ( "charm.land/fantasy" "charm.land/fantasy/providers/internal/httpheaders" - "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/option" ) const ( diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index f9c7235a1..f517e8e3f 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -11,7 +11,7 @@ import ( "testing" "charm.land/fantasy" - "github.com/openai/openai-go/v3/packages/param" + "github.com/charmbracelet/openai-go/packages/param" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/providers/openai/provider_options.go b/providers/openai/provider_options.go index 504d61d4c..50abadbb2 100644 --- a/providers/openai/provider_options.go +++ b/providers/openai/provider_options.go @@ -5,7 +5,7 @@ import ( "encoding/json" "charm.land/fantasy" - "github.com/openai/openai-go/v3" + "github.com/charmbracelet/openai-go" ) // ReasoningEffort represents the reasoning effort level for OpenAI models. diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 2ec330bbb..dc11e5eb6 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -12,11 +12,11 @@ import ( "charm.land/fantasy" "charm.land/fantasy/object" "charm.land/fantasy/schema" + "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" + "github.com/charmbracelet/openai-go/responses" + "github.com/charmbracelet/openai-go/shared" "github.com/google/uuid" - "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" - "github.com/openai/openai-go/v3/responses" - "github.com/openai/openai-go/v3/shared" ) const topLogprobsMax = 20 diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index 36c847e02..4da86c0f4 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -8,9 +8,9 @@ import ( "charm.land/fantasy" "charm.land/fantasy/providers/openai" - openaisdk "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" - "github.com/openai/openai-go/v3/shared" + openaisdk "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" + "github.com/charmbracelet/openai-go/shared" ) const reasoningStartedCtx = "reasoning_started" diff --git a/providers/openaicompat/openaicompat.go b/providers/openaicompat/openaicompat.go index e7a290815..bb376c59e 100644 --- a/providers/openaicompat/openaicompat.go +++ b/providers/openaicompat/openaicompat.go @@ -4,7 +4,7 @@ package openaicompat import ( "charm.land/fantasy" "charm.land/fantasy/providers/openai" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go/option" ) type options struct { diff --git a/providers/openrouter/language_model_hooks.go b/providers/openrouter/language_model_hooks.go index 072224693..d38fb8b17 100644 --- a/providers/openrouter/language_model_hooks.go +++ b/providers/openrouter/language_model_hooks.go @@ -11,8 +11,8 @@ import ( "charm.land/fantasy/providers/anthropic" "charm.land/fantasy/providers/google" "charm.land/fantasy/providers/openai" - openaisdk "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" + openaisdk "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" ) const reasoningStartedCtx = "reasoning_started" diff --git a/providers/openrouter/openrouter.go b/providers/openrouter/openrouter.go index d21290a59..36b066c0a 100644 --- a/providers/openrouter/openrouter.go +++ b/providers/openrouter/openrouter.go @@ -6,7 +6,7 @@ import ( "charm.land/fantasy" "charm.land/fantasy/providers/openai" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go/option" ) type options struct { diff --git a/providers/vercel/language_model_hooks.go b/providers/vercel/language_model_hooks.go index b39d01ea1..e3b829210 100644 --- a/providers/vercel/language_model_hooks.go +++ b/providers/vercel/language_model_hooks.go @@ -11,8 +11,8 @@ import ( "charm.land/fantasy/providers/anthropic" "charm.land/fantasy/providers/google" openaipkg "charm.land/fantasy/providers/openai" - openaisdk "github.com/openai/openai-go/v3" - "github.com/openai/openai-go/v3/packages/param" + openaisdk "github.com/charmbracelet/openai-go" + "github.com/charmbracelet/openai-go/packages/param" ) const reasoningStartedCtx = "reasoning_started" diff --git a/providers/vercel/vercel.go b/providers/vercel/vercel.go index 79f31f1df..65e8d31c3 100644 --- a/providers/vercel/vercel.go +++ b/providers/vercel/vercel.go @@ -4,7 +4,7 @@ package vercel import ( "charm.land/fantasy" "charm.land/fantasy/providers/openai" - "github.com/openai/openai-go/v3/option" + "github.com/charmbracelet/openai-go/option" ) type options struct { From 2556dbc4d9090290bb39d9457252b3bbb8d322f8 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 12:08:41 -0300 Subject: [PATCH 07/32] test: add integration tests for avian --- providertests/.env.sample | 1 + providertests/common_test.go | 20 + providertests/openaicompat_test.go | 14 + .../avian-kimi/multi_tool_streaming.yaml | 274 +++++++++++++ .../avian-kimi/simple_streaming.yaml | 313 +++++++++++++++ .../avian-kimi/tool_streaming.yaml | 364 ++++++++++++++++++ .../avian-kimi/thinking-streaming.yaml | 212 ++++++++++ 7 files changed, 1198 insertions(+) create mode 100644 providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenAICompatibleThinking/avian-kimi/thinking-streaming.yaml diff --git a/providertests/.env.sample b/providertests/.env.sample index a8587fb71..87efd7f9b 100644 --- a/providertests/.env.sample +++ b/providertests/.env.sample @@ -1,4 +1,5 @@ FANTASY_ANTHROPIC_API_KEY= +FANTASY_AVIAN_API_KEY= FANTASY_AZURE_API_KEY= FANTASY_AZURE_BASE_URL= FANTASY_BEDROCK_API_KEY= diff --git a/providertests/common_test.go b/providertests/common_test.go index e5f9c1c0e..6878761ff 100644 --- a/providertests/common_test.go +++ b/providertests/common_test.go @@ -54,6 +54,10 @@ func testSimple(t *testing.T, pair builderPair) { } t.Run("simple", func(t *testing.T) { + if strings.HasPrefix(pair.name, "avian-") { + t.Skip("Avian only support streaming") + } + r := vcr.NewRecorder(t) languageModel, err := pair.builder(t, r) @@ -72,6 +76,7 @@ func testSimple(t *testing.T, pair builderPair) { require.NoError(t, err, "failed to generate") checkResult(t, result) }) + t.Run("simple streaming", func(t *testing.T) { r := vcr.NewRecorder(t) @@ -127,6 +132,10 @@ func testTool(t *testing.T, pair builderPair) { } t.Run("tool", func(t *testing.T) { + if strings.HasPrefix(pair.name, "avian-") { + t.Skip("Avian only support streaming") + } + r := vcr.NewRecorder(t) languageModel, err := pair.builder(t, r) @@ -146,6 +155,7 @@ func testTool(t *testing.T, pair builderPair) { require.NoError(t, err, "failed to generate") checkResult(t, result) }) + t.Run("tool streaming", func(t *testing.T) { r := vcr.NewRecorder(t) @@ -227,6 +237,10 @@ func testMultiTool(t *testing.T, pair builderPair) { } t.Run("multi tool", func(t *testing.T) { + if strings.HasPrefix(pair.name, "avian-") { + t.Skip("Avian only support streaming") + } + r := vcr.NewRecorder(t) languageModel, err := pair.builder(t, r) @@ -247,6 +261,7 @@ func testMultiTool(t *testing.T, pair builderPair) { require.NoError(t, err, "failed to generate") checkResult(t, result) }) + t.Run("multi tool streaming", func(t *testing.T) { r := vcr.NewRecorder(t) @@ -274,6 +289,10 @@ func testThinking(t *testing.T, pairs []builderPair, thinkChecks func(*testing.T for _, pair := range pairs { t.Run(pair.name, func(t *testing.T) { t.Run("thinking", func(t *testing.T) { + if strings.HasPrefix(pair.name, "avian-") { + t.Skip("Avian only support streaming") + } + r := vcr.NewRecorder(t) languageModel, err := pair.builder(t, r) @@ -310,6 +329,7 @@ func testThinking(t *testing.T, pairs []builderPair, thinkChecks func(*testing.T thinkChecks(t, result) }) + t.Run("thinking-streaming", func(t *testing.T) { r := vcr.NewRecorder(t) diff --git a/providertests/openaicompat_test.go b/providertests/openaicompat_test.go index d955fc9f7..402fb00c4 100644 --- a/providertests/openaicompat_test.go +++ b/providertests/openaicompat_test.go @@ -20,6 +20,7 @@ func TestOpenAICompatibleCommon(t *testing.T) { {"zai-glm-4-7-flash", builderZAIGLM47Flash, nil, nil}, {"huggingface-kimi-k2", builderHuggingFace, nil, nil}, {"llama-cpp-gpt-oss", builderLlamaCppGptOss, nil, nil}, + {"avian-kimi", builderAvianKimi, nil, nil}, }) } @@ -41,6 +42,7 @@ func TestOpenAICompatibleThinking(t *testing.T) { {"xai-grok-3-mini", builderXAIGrok3Mini, opts, nil}, {"zai-glm-4-7-flash", builderZAIGLM47Flash, opts, nil}, {"llama-cpp-gpt-oss", builderLlamaCppGptOss, opts, nil}, + {"avian-kimi", builderAvianKimi, nil, nil}, }, testOpenAICompatThinking) } @@ -140,3 +142,15 @@ func builderLlamaCppGptOss(t *testing.T, r *vcr.Recorder) (fantasy.LanguageModel } return provider.LanguageModel(t.Context(), "openai/gpt-oss-20b") } + +func builderAvianKimi(t *testing.T, r *vcr.Recorder) (fantasy.LanguageModel, error) { + provider, err := openaicompat.New( + openaicompat.WithBaseURL("https://api.avian.io/v1"), + openaicompat.WithAPIKey(os.Getenv("FANTASY_AVIAN_API_KEY")), + openaicompat.WithHTTPClient(&http.Client{Transport: r}), + ) + if err != nil { + return nil, err + } + return provider.LanguageModel(t.Context(), "moonshotai/kimi-k2.5") +} diff --git a/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/multi_tool_streaming.yaml b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/multi_tool_streaming.yaml new file mode 100644 index 000000000..209451f94 --- /dev/null +++ b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/multi_tool_streaming.yaml @@ -0,0 +1,274 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 862 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-ec08ee4b2cd84124b8f4f469", "object": "chat.completion.chunk", "created": 1773932885, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "The", "format": "unknown", "index": 0}], "reasoning_content": "The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " user wants", "format": "unknown", "index": 0}], "reasoning_content": " user wants"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " me to", "format": "unknown", "index": 0}], "reasoning_content": " me to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " add and", "format": "unknown", "index": 0}], "reasoning_content": " add and"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " multiply the", "format": "unknown", "index": 0}], "reasoning_content": " multiply the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " numbers ", "format": "unknown", "index": 0}], "reasoning_content": " numbers "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "2 and", "format": "unknown", "index": 0}], "reasoning_content": "2 and"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 3", "format": "unknown", "index": 0}], "reasoning_content": " 3"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". The", "format": "unknown", "index": 0}], "reasoning_content": ". The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " instruction", "format": "unknown", "index": 0}], "reasoning_content": " instruction"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " says \"", "format": "unknown", "index": 0}], "reasoning_content": " says \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Always use", "format": "unknown", "index": 0}], "reasoning_content": "Always use"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " both add", "format": "unknown", "index": 0}], "reasoning_content": " both add"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " and multiply", "format": "unknown", "index": 0}], "reasoning_content": " and multiply"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " at the", "format": "unknown", "index": 0}], "reasoning_content": " at the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " same time", "format": "unknown", "index": 0}], "reasoning_content": " same time"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ".\"\n\n", "format": "unknown", "index": 0}], "reasoning_content": ".\"\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "So", "format": "unknown", "index": 0}], "reasoning_content": "So"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I need", "format": "unknown", "index": 0}], "reasoning_content": " I need"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " to call", "format": "unknown", "index": 0}], "reasoning_content": " to call"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " both functions", "format": "unknown", "index": 0}], "reasoning_content": " both functions"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ":\n-", "format": "unknown", "index": 0}], "reasoning_content": ":\n-"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " add(", "format": "unknown", "index": 0}], "reasoning_content": " add("}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "2,", "format": "unknown", "index": 0}], "reasoning_content": "2,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 3", "format": "unknown", "index": 0}], "reasoning_content": " 3"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ")\n-", "format": "unknown", "index": 0}], "reasoning_content": ")\n-"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " multiply(", "format": "unknown", "index": 0}], "reasoning_content": " multiply("}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "2,", "format": "unknown", "index": 0}], "reasoning_content": "2,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 3", "format": "unknown", "index": 0}], "reasoning_content": " 3"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ")\n\nSince", "format": "unknown", "index": 0}], "reasoning_content": ")\n\nSince"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " these are", "format": "unknown", "index": 0}], "reasoning_content": " these are"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " independent operations", "format": "unknown", "index": 0}], "reasoning_content": " independent operations"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " (", "format": "unknown", "index": 0}], "reasoning_content": " ("}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "they", "format": "unknown", "index": 0}], "reasoning_content": "they"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " don't depend", "format": "unknown", "index": 0}], "reasoning_content": " don't depend"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " on each", "format": "unknown", "index": 0}], "reasoning_content": " on each"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " other),", "format": "unknown", "index": 0}], "reasoning_content": " other),"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I can", "format": "unknown", "index": 0}], "reasoning_content": " I can"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " make both", "format": "unknown", "index": 0}], "reasoning_content": " make both"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " calls in", "format": "unknown", "index": 0}], "reasoning_content": " calls in"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the same", "format": "unknown", "index": 0}], "reasoning_content": " the same"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function_calls", "format": "unknown", "index": 0}], "reasoning_content": " function_calls"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " block.", "format": "unknown", "index": 0}], "reasoning_content": " block."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " ", "format": "unknown", "index": 0}], "reasoning_content": " "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " I'll", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " add and", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " multiply ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "2 and", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " 3", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " for you", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " at", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " the same", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " time.", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "id": "functions.add:0", "type": "function", "function": {"name": "add", "arguments": ""}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "function": {"arguments": "{\"a\": 2, \"b\": 3}"}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 1, "id": "functions.multiply:1", "type": "function", "function": {"name": "multiply", "arguments": ""}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 1, "function": {"arguments": "{\"a\": 2, \"b\": 3}"}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}]} + + data: {"id": "gen-1773932884-wGz1eX8aEKiwuYKtVVBo", "object": "chat.completion.chunk", "created": 1773932884, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}], "usage": {"prompt_tokens": 154, "completion_tokens": 131, "total_tokens": 285, "cost": 0.0003287, "prompt_tokens_details": {"cached_tokens": 128, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 87, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 362.715792ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1620 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":" ","tool_calls":[{"id":"functions.add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"functions.multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_content":"The user wants me to add and multiply the numbers 2 and 3. The instruction says \"Always use both add and multiply at the same time.\"\n\nSo I need to call both functions:\n- add(2, 3)\n- multiply(2, 3)\n\nSince these are independent operations (they don''t depend on each other), I can make both calls in the same function_calls block. "},{"content":"5","tool_call_id":"functions.add:0","role":"tool"},{"content":"6","tool_call_id":"functions.multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-3e07ab841333408298e7e6fe", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Great", "format": "unknown", "index": 0}], "reasoning_content": "Great"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "! I", "format": "unknown", "index": 0}], "reasoning_content": "! I"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " got the", "format": "unknown", "index": 0}], "reasoning_content": " got the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " results:\n", "format": "unknown", "index": 0}], "reasoning_content": " results:\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "- add", "format": "unknown", "index": 0}], "reasoning_content": "- add"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "(2", "format": "unknown", "index": 0}], "reasoning_content": "(2"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", ", "format": "unknown", "index": 0}], "reasoning_content": ", "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "3)", "format": "unknown", "index": 0}], "reasoning_content": "3)"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " = ", "format": "unknown", "index": 0}], "reasoning_content": " = "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "5\n", "format": "unknown", "index": 0}], "reasoning_content": "5\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "- multiply", "format": "unknown", "index": 0}], "reasoning_content": "- multiply"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "(2", "format": "unknown", "index": 0}], "reasoning_content": "(2"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", ", "format": "unknown", "index": 0}], "reasoning_content": ", "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "3)", "format": "unknown", "index": 0}], "reasoning_content": "3)"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " = ", "format": "unknown", "index": 0}], "reasoning_content": " = "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "6\n\n", "format": "unknown", "index": 0}], "reasoning_content": "6\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Now I'll", "format": "unknown", "index": 0}], "reasoning_content": "Now I'll"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " present", "format": "unknown", "index": 0}], "reasoning_content": " present"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " these", "format": "unknown", "index": 0}], "reasoning_content": " these"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " results to", "format": "unknown", "index": 0}], "reasoning_content": " results to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the user", "format": "unknown", "index": 0}], "reasoning_content": " the user"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". ", "format": "unknown", "index": 0}], "reasoning_content": ". "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " When", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " you add", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " 2", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " and ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "3,", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " the", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " result is", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " **5", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "**.\n", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "When you", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " multiply ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "2 and", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " 3", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ", the", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " result is", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " **6", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "**.", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "stop", "native_finish_reason": "stop"}]} + + data: {"id": "gen-1773932887-UC9ZiV5rru8IUs3iJx0w", "object": "chat.completion.chunk", "created": 1773932887, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "stop", "native_finish_reason": "stop"}], "usage": {"prompt_tokens": 308, "completion_tokens": 71, "total_tokens": 379, "cost": 0.0002444, "prompt_tokens_details": {"cached_tokens": 224, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 30, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 346.239959ms diff --git a/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/simple_streaming.yaml b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/simple_streaming.yaml new file mode 100644 index 000000000..97ae95b4c --- /dev/null +++ b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/simple_streaming.yaml @@ -0,0 +1,313 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 224 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-03d7a8c9ff7843d98715145a", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "The", "format": "unknown", "index": 0}], "reasoning_content": "The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " user wants", "format": "unknown", "index": 0}], "reasoning_content": " user wants"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " me to", "format": "unknown", "index": 0}], "reasoning_content": " me to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " say \"", "format": "unknown", "index": 0}], "reasoning_content": " say \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "hi\"", "format": "unknown", "index": 0}], "reasoning_content": "hi\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " in Portuguese", "format": "unknown", "index": 0}], "reasoning_content": " in Portuguese"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". \n\n", "format": "unknown", "index": 0}], "reasoning_content": ". \n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "In", "format": "unknown", "index": 0}], "reasoning_content": "In"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Portuguese,", "format": "unknown", "index": 0}], "reasoning_content": " Portuguese,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the common", "format": "unknown", "index": 0}], "reasoning_content": " the common"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " ways to", "format": "unknown", "index": 0}], "reasoning_content": " ways to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " say \"", "format": "unknown", "index": 0}], "reasoning_content": " say \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "hi\"", "format": "unknown", "index": 0}], "reasoning_content": "hi\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " are:\n", "format": "unknown", "index": 0}], "reasoning_content": " are:\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "- \"", "format": "unknown", "index": 0}], "reasoning_content": "- \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Oi", "format": "unknown", "index": 0}], "reasoning_content": "Oi"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" -", "format": "unknown", "index": 0}], "reasoning_content": "\" -"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " informal", "format": "unknown", "index": 0}], "reasoning_content": " informal"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", most", "format": "unknown", "index": 0}], "reasoning_content": ", most"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " common\n", "format": "unknown", "index": 0}], "reasoning_content": " common\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "- \"", "format": "unknown", "index": 0}], "reasoning_content": "- \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Olá", "format": "unknown", "index": 0}], "reasoning_content": "Olá"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" -", "format": "unknown", "index": 0}], "reasoning_content": "\" -"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " slightly", "format": "unknown", "index": 0}], "reasoning_content": " slightly"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " more formal", "format": "unknown", "index": 0}], "reasoning_content": " more formal"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", means", "format": "unknown", "index": 0}], "reasoning_content": ", means"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"hello", "format": "unknown", "index": 0}], "reasoning_content": " \"hello"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\"\n-", "format": "unknown", "index": 0}], "reasoning_content": "\"\n-"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"E", "format": "unknown", "index": 0}], "reasoning_content": " \"E"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " a", "format": "unknown", "index": 0}], "reasoning_content": " a"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "í?\"", "format": "unknown", "index": 0}], "reasoning_content": "í?\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " -", "format": "unknown", "index": 0}], "reasoning_content": " -"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " very informal", "format": "unknown", "index": 0}], "reasoning_content": " very informal"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", like", "format": "unknown", "index": 0}], "reasoning_content": ", like"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"what", "format": "unknown", "index": 0}], "reasoning_content": " \"what"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "'s up", "format": "unknown", "index": 0}], "reasoning_content": "'s up"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "?\"\n", "format": "unknown", "index": 0}], "reasoning_content": "?\"\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "- \"", "format": "unknown", "index": 0}], "reasoning_content": "- \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "T", "format": "unknown", "index": 0}], "reasoning_content": "T"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "udo", "format": "unknown", "index": 0}], "reasoning_content": "udo"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " bem", "format": "unknown", "index": 0}], "reasoning_content": " bem"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "?\" -", "format": "unknown", "index": 0}], "reasoning_content": "?\" -"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"how", "format": "unknown", "index": 0}], "reasoning_content": " \"how"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " are you", "format": "unknown", "index": 0}], "reasoning_content": " are you"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "?", "format": "unknown", "index": 0}], "reasoning_content": "?"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\"\n\nThe", "format": "unknown", "index": 0}], "reasoning_content": "\"\n\nThe"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " most straightforward", "format": "unknown", "index": 0}], "reasoning_content": " most straightforward"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " and standard", "format": "unknown", "index": 0}], "reasoning_content": " and standard"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " translation of", "format": "unknown", "index": 0}], "reasoning_content": " translation of"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"hi", "format": "unknown", "index": 0}], "reasoning_content": " \"hi"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" is", "format": "unknown", "index": 0}], "reasoning_content": "\" is"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Oi", "format": "unknown", "index": 0}], "reasoning_content": " \"Oi"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" or", "format": "unknown", "index": 0}], "reasoning_content": "\" or"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Ol", "format": "unknown", "index": 0}], "reasoning_content": " \"Ol"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "á\".", "format": "unknown", "index": 0}], "reasoning_content": "á\"."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I should", "format": "unknown", "index": 0}], "reasoning_content": " I should"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " provide the", "format": "unknown", "index": 0}], "reasoning_content": " provide the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " most common", "format": "unknown", "index": 0}], "reasoning_content": " most common"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " one,", "format": "unknown", "index": 0}], "reasoning_content": " one,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " which", "format": "unknown", "index": 0}], "reasoning_content": " which"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " is \"", "format": "unknown", "index": 0}], "reasoning_content": " is \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Oi\",", "format": "unknown", "index": 0}], "reasoning_content": "Oi\","}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " but maybe", "format": "unknown", "index": 0}], "reasoning_content": " but maybe"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " also mention", "format": "unknown", "index": 0}], "reasoning_content": " also mention"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Ol", "format": "unknown", "index": 0}], "reasoning_content": " \"Ol"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "á\"", "format": "unknown", "index": 0}], "reasoning_content": "á\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " as it's", "format": "unknown", "index": 0}], "reasoning_content": " as it's"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " also very", "format": "unknown", "index": 0}], "reasoning_content": " also very"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " common.\n\n", "format": "unknown", "index": 0}], "reasoning_content": " common.\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "I'll", "format": "unknown", "index": 0}], "reasoning_content": "I'll"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " provide \"", "format": "unknown", "index": 0}], "reasoning_content": " provide \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Oi!\"", "format": "unknown", "index": 0}], "reasoning_content": "Oi!\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " as the", "format": "unknown", "index": 0}], "reasoning_content": " as the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " primary answer", "format": "unknown", "index": 0}], "reasoning_content": " primary answer"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", and", "format": "unknown", "index": 0}], "reasoning_content": ", and"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " perhaps", "format": "unknown", "index": 0}], "reasoning_content": " perhaps"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " mention \"", "format": "unknown", "index": 0}], "reasoning_content": " mention \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Olá", "format": "unknown", "index": 0}], "reasoning_content": "Olá"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" as", "format": "unknown", "index": 0}], "reasoning_content": "\" as"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " an alternative", "format": "unknown", "index": 0}], "reasoning_content": " an alternative"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " since", "format": "unknown", "index": 0}], "reasoning_content": " since"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it's also", "format": "unknown", "index": 0}], "reasoning_content": " it's also"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " very standard", "format": "unknown", "index": 0}], "reasoning_content": " very standard"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ".\n\nActually", "format": "unknown", "index": 0}], "reasoning_content": ".\n\nActually"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", looking", "format": "unknown", "index": 0}], "reasoning_content": ", looking"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " at the", "format": "unknown", "index": 0}], "reasoning_content": " at the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " simplicity", "format": "unknown", "index": 0}], "reasoning_content": " simplicity"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " of the", "format": "unknown", "index": 0}], "reasoning_content": " of the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " request,", "format": "unknown", "index": 0}], "reasoning_content": " request,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I should", "format": "unknown", "index": 0}], "reasoning_content": " I should"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " probably", "format": "unknown", "index": 0}], "reasoning_content": " probably"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " just give", "format": "unknown", "index": 0}], "reasoning_content": " just give"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " a", "format": "unknown", "index": 0}], "reasoning_content": " a"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " direct", "format": "unknown", "index": 0}], "reasoning_content": " direct"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " answer with", "format": "unknown", "index": 0}], "reasoning_content": " answer with"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " perhaps", "format": "unknown", "index": 0}], "reasoning_content": " perhaps"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " a brief", "format": "unknown", "index": 0}], "reasoning_content": " a brief"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " note", "format": "unknown", "index": 0}], "reasoning_content": " note"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " about form", "format": "unknown", "index": 0}], "reasoning_content": " about form"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "ality.\n\n", "format": "unknown", "index": 0}], "reasoning_content": "ality.\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Best", "format": "unknown", "index": 0}], "reasoning_content": "Best"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " answer:", "format": "unknown", "index": 0}], "reasoning_content": " answer:"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Oi", "format": "unknown", "index": 0}], "reasoning_content": " \"Oi"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "!\"", "format": "unknown", "index": 0}], "reasoning_content": "!\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " or \"", "format": "unknown", "index": 0}], "reasoning_content": " or \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Olá", "format": "unknown", "index": 0}], "reasoning_content": "Olá"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "!\"\n\n", "format": "unknown", "index": 0}], "reasoning_content": "!\"\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "I'll go", "format": "unknown", "index": 0}], "reasoning_content": "I'll go"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " with \"", "format": "unknown", "index": 0}], "reasoning_content": " with \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Oi!\"", "format": "unknown", "index": 0}], "reasoning_content": "Oi!\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " as the", "format": "unknown", "index": 0}], "reasoning_content": " as the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " main answer", "format": "unknown", "index": 0}], "reasoning_content": " main answer"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " since it's", "format": "unknown", "index": 0}], "reasoning_content": " since it's"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the most", "format": "unknown", "index": 0}], "reasoning_content": " the most"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " direct equivalent", "format": "unknown", "index": 0}], "reasoning_content": " direct equivalent"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " to", "format": "unknown", "index": 0}], "reasoning_content": " to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the", "format": "unknown", "index": 0}], "reasoning_content": " the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " casual English", "format": "unknown", "index": 0}], "reasoning_content": " casual English"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"hi", "format": "unknown", "index": 0}], "reasoning_content": " \"hi"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\",", "format": "unknown", "index": 0}], "reasoning_content": "\","}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " and mention", "format": "unknown", "index": 0}], "reasoning_content": " and mention"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Ol", "format": "unknown", "index": 0}], "reasoning_content": " \"Ol"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "á\"", "format": "unknown", "index": 0}], "reasoning_content": "á\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " as a", "format": "unknown", "index": 0}], "reasoning_content": " as a"}, "finish_reason": null, "native_finish_reason": null}]} + + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " slightly more", "format": "unknown", "index": 0}], "reasoning_content": " slightly more"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " formal alternative", "format": "unknown", "index": 0}], "reasoning_content": " formal alternative"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". ", "format": "unknown", "index": 0}], "reasoning_content": ". "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Oi", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "! \n\n", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "(Or", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " \"", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "Olá", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "!\" which", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " is slightly", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " more formal", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ")", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "stop", "native_finish_reason": "stop"}]} + + data: {"id": "gen-1773932873-cZ28aIfjOk9BQ9QjyZz3", "object": "chat.completion.chunk", "created": 1773932873, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "stop", "native_finish_reason": "stop"}], "usage": {"prompt_tokens": 21, "completion_tokens": 242, "total_tokens": 263, "cost": 0.00054005, "prompt_tokens_details": {"cached_tokens": 8, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 238, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 1.06203225s diff --git a/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/tool_streaming.yaml b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/tool_streaming.yaml new file mode 100644 index 000000000..a37ecf5df --- /dev/null +++ b/providertests/testdata/TestOpenAICompatibleCommon/avian-kimi/tool_streaming.yaml @@ -0,0 +1,364 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 516 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-9091e2c02aec4d94a5ad7fe3", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "The", "format": "unknown", "index": 0}], "reasoning_content": "The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " user is", "format": "unknown", "index": 0}], "reasoning_content": " user is"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " asking for", "format": "unknown", "index": 0}], "reasoning_content": " asking for"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the weather", "format": "unknown", "index": 0}], "reasoning_content": " the weather"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " in", "format": "unknown", "index": 0}], "reasoning_content": " in"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Florence,", "format": "unknown", "index": 0}], "reasoning_content": " Florence,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Italy.", "format": "unknown", "index": 0}], "reasoning_content": " Italy."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I have", "format": "unknown", "index": 0}], "reasoning_content": " I have"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " a weather", "format": "unknown", "index": 0}], "reasoning_content": " a weather"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function available", "format": "unknown", "index": 0}], "reasoning_content": " function available"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " that can", "format": "unknown", "index": 0}], "reasoning_content": " that can"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " get", "format": "unknown", "index": 0}], "reasoning_content": " get"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " weather information", "format": "unknown", "index": 0}], "reasoning_content": " weather information"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " for a", "format": "unknown", "index": 0}], "reasoning_content": " for a"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " location.", "format": "unknown", "index": 0}], "reasoning_content": " location."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I need", "format": "unknown", "index": 0}], "reasoning_content": " I need"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " to call", "format": "unknown", "index": 0}], "reasoning_content": " to call"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " this", "format": "unknown", "index": 0}], "reasoning_content": " this"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function with", "format": "unknown", "index": 0}], "reasoning_content": " function with"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"", "format": "unknown", "index": 0}], "reasoning_content": " \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Flore", "format": "unknown", "index": 0}], "reasoning_content": "Flore"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "nce,", "format": "unknown", "index": 0}], "reasoning_content": "nce,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Italy", "format": "unknown", "index": 0}], "reasoning_content": "Italy"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" (", "format": "unknown", "index": 0}], "reasoning_content": "\" ("}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "or just", "format": "unknown", "index": 0}], "reasoning_content": "or just"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"Fl", "format": "unknown", "index": 0}], "reasoning_content": " \"Fl"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "orence", "format": "unknown", "index": 0}], "reasoning_content": "orence"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\"", "format": "unknown", "index": 0}], "reasoning_content": "\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " since", "format": "unknown", "index": 0}], "reasoning_content": " since"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Italy", "format": "unknown", "index": 0}], "reasoning_content": " Italy"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " is implied", "format": "unknown", "index": 0}], "reasoning_content": " is implied"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ") as", "format": "unknown", "index": 0}], "reasoning_content": ") as"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the location", "format": "unknown", "index": 0}], "reasoning_content": " the location"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " parameter.\n\n", "format": "unknown", "index": 0}], "reasoning_content": " parameter.\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Let me", "format": "unknown", "index": 0}], "reasoning_content": "Let me"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " call the", "format": "unknown", "index": 0}], "reasoning_content": " call the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " weather function", "format": "unknown", "index": 0}], "reasoning_content": " weather function"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " with the", "format": "unknown", "index": 0}], "reasoning_content": " with the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " location \"", "format": "unknown", "index": 0}], "reasoning_content": " location \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Flore", "format": "unknown", "index": 0}], "reasoning_content": "Flore"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "nce,", "format": "unknown", "index": 0}], "reasoning_content": "nce,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Italy\".", "format": "unknown", "index": 0}], "reasoning_content": "Italy\"."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " ", "format": "unknown", "index": 0}], "reasoning_content": " "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "id": "functions.weather:0", "type": "function", "function": {"name": "weather", "arguments": ""}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "function": {"arguments": "{\"location\": \"Florence,Italy\"}"}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}]} + + data: {"id": "gen-1773932879-9itFTxmMNzDrUKQO1wmR", "object": "chat.completion.chunk", "created": 1773932879, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}], "usage": {"prompt_tokens": 76, "completion_tokens": 96, "total_tokens": 172, "cost": 0.000231, "prompt_tokens_details": {"cached_tokens": 64, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 85, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 478.108041ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1126 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":" ","tool_calls":[{"id":"functions.weather:0","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_content":"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. I need to call this function with \"Florence,Italy\" (or just \"Florence\" since Italy is implied) as the location parameter.\n\nLet me call the weather function with the location \"Florence,Italy\". "},{"content":"40 C","tool_call_id":"functions.weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-f958b814284a4e529ecd5d41", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "The", "format": "unknown", "index": 0}], "reasoning_content": "The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function returned", "format": "unknown", "index": 0}], "reasoning_content": " function returned"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"", "format": "unknown", "index": 0}], "reasoning_content": " \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "40 C", "format": "unknown", "index": 0}], "reasoning_content": "40 C"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\"", "format": "unknown", "index": 0}], "reasoning_content": "\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " which means", "format": "unknown", "index": 0}], "reasoning_content": " which means"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 40 degrees", "format": "unknown", "index": 0}], "reasoning_content": " 40 degrees"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Celsius.", "format": "unknown", "index": 0}], "reasoning_content": " Celsius."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " This", "format": "unknown", "index": 0}], "reasoning_content": " This"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " is extremely", "format": "unknown", "index": 0}], "reasoning_content": " is extremely"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " hot -", "format": "unknown", "index": 0}], "reasoning_content": " hot -"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " almost", "format": "unknown", "index": 0}], "reasoning_content": " almost"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " dangerously", "format": "unknown", "index": 0}], "reasoning_content": " dangerously"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " hot", "format": "unknown", "index": 0}], "reasoning_content": " hot"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " for", "format": "unknown", "index": 0}], "reasoning_content": " for"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " a", "format": "unknown", "index": 0}], "reasoning_content": " a"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " city like", "format": "unknown", "index": 0}], "reasoning_content": " city like"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Florence.", "format": "unknown", "index": 0}], "reasoning_content": " Florence."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " But", "format": "unknown", "index": 0}], "reasoning_content": " But"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " this", "format": "unknown", "index": 0}], "reasoning_content": " this"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " is what", "format": "unknown", "index": 0}], "reasoning_content": " is what"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the function", "format": "unknown", "index": 0}], "reasoning_content": " the function"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " returned,", "format": "unknown", "index": 0}], "reasoning_content": " returned,"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " so I", "format": "unknown", "index": 0}], "reasoning_content": " so I"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " should present", "format": "unknown", "index": 0}], "reasoning_content": " should present"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " this", "format": "unknown", "index": 0}], "reasoning_content": " this"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " information to", "format": "unknown", "index": 0}], "reasoning_content": " information to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the user", "format": "unknown", "index": 0}], "reasoning_content": " the user"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". I", "format": "unknown", "index": 0}], "reasoning_content": ". I"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " should convert", "format": "unknown", "index": 0}], "reasoning_content": " should convert"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it to", "format": "unknown", "index": 0}], "reasoning_content": " it to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Fahrenheit as", "format": "unknown", "index": 0}], "reasoning_content": " Fahrenheit as"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " well to", "format": "unknown", "index": 0}], "reasoning_content": " well to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " make", "format": "unknown", "index": 0}], "reasoning_content": " make"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it more", "format": "unknown", "index": 0}], "reasoning_content": " it more"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " accessible", "format": "unknown", "index": 0}], "reasoning_content": " accessible"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", and", "format": "unknown", "index": 0}], "reasoning_content": ", and"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " perhaps", "format": "unknown", "index": 0}], "reasoning_content": " perhaps"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " note that", "format": "unknown", "index": 0}], "reasoning_content": " note that"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it's", "format": "unknown", "index": 0}], "reasoning_content": " it's"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " very", "format": "unknown", "index": 0}], "reasoning_content": " very"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " hot.\n\n", "format": "unknown", "index": 0}], "reasoning_content": " hot.\n\n"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "40°C", "format": "unknown", "index": 0}], "reasoning_content": "40°C"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " = ", "format": "unknown", "index": 0}], "reasoning_content": " = "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "104°F", "format": "unknown", "index": 0}], "reasoning_content": "104°F"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " (", "format": "unknown", "index": 0}], "reasoning_content": " ("}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "40", "format": "unknown", "index": 0}], "reasoning_content": "40"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " *", "format": "unknown", "index": 0}], "reasoning_content": " *"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 9", "format": "unknown", "index": 0}], "reasoning_content": " 9"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "/5", "format": "unknown", "index": 0}], "reasoning_content": "/5"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " + ", "format": "unknown", "index": 0}], "reasoning_content": " + "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "32 =", "format": "unknown", "index": 0}], "reasoning_content": "32 ="}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 72", "format": "unknown", "index": 0}], "reasoning_content": " 72"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " + ", "format": "unknown", "index": 0}], "reasoning_content": " + "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "32 =", "format": "unknown", "index": 0}], "reasoning_content": "32 ="}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 104", "format": "unknown", "index": 0}], "reasoning_content": " 104"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ")\n\nI'll", "format": "unknown", "index": 0}], "reasoning_content": ")\n\nI'll"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " present", "format": "unknown", "index": 0}], "reasoning_content": " present"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " this information", "format": "unknown", "index": 0}], "reasoning_content": " this information"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " clearly.", "format": "unknown", "index": 0}], "reasoning_content": " clearly."}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " ", "format": "unknown", "index": 0}], "reasoning_content": " "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " The", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " weather in", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Florence,", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Italy is", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " **", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "40°C", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " (104", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "°F)**", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ".\n\n", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "That's extremely", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " hot!", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ☀️", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " If you're", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " visiting Florence", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ", make", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " sure to", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " stay hydrated", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ", seek", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " shade during", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " the midday", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " hours,", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " and wear", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " sun", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " protection.", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Temperature", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "s this", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " high are", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " typical", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " of", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " peak", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " summer", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " heat waves", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " in the", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " region", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ".", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "stop", "native_finish_reason": "stop"}]} + + data: {"id": "gen-1773932881-AW4KeKUZwBMqmOdcdJ6Q", "object": "chat.completion.chunk", "created": 1773932881, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "stop", "native_finish_reason": "stop"}], "usage": {"prompt_tokens": 194, "completion_tokens": 161, "total_tokens": 355, "cost": 0.0004127, "prompt_tokens_details": {"cached_tokens": 128, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 109, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 336.129584ms diff --git a/providertests/testdata/TestOpenAICompatibleThinking/avian-kimi/thinking-streaming.yaml b/providertests/testdata/TestOpenAICompatibleThinking/avian-kimi/thinking-streaming.yaml new file mode 100644 index 000000000..a4aaa5a3a --- /dev/null +++ b/providertests/testdata/TestOpenAICompatibleThinking/avian-kimi/thinking-streaming.yaml @@ -0,0 +1,212 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 499 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"moonshotai/kimi-k2.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-6e0335f41a00481da298cc3f", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "I", "format": "unknown", "index": 0}], "reasoning_content": "I"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " need to", "format": "unknown", "index": 0}], "reasoning_content": " need to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " get the", "format": "unknown", "index": 0}], "reasoning_content": " get the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " weather information", "format": "unknown", "index": 0}], "reasoning_content": " weather information"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " for Florence", "format": "unknown", "index": 0}], "reasoning_content": " for Florence"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ", Italy", "format": "unknown", "index": 0}], "reasoning_content": ", Italy"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". I'll", "format": "unknown", "index": 0}], "reasoning_content": ". I'll"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " call", "format": "unknown", "index": 0}], "reasoning_content": " call"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the weather", "format": "unknown", "index": 0}], "reasoning_content": " the weather"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function with", "format": "unknown", "index": 0}], "reasoning_content": " function with"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"", "format": "unknown", "index": 0}], "reasoning_content": " \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "Fl", "format": "unknown", "index": 0}], "reasoning_content": "Fl"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "orence", "format": "unknown", "index": 0}], "reasoning_content": "orence"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\"", "format": "unknown", "index": 0}], "reasoning_content": "\""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " as the", "format": "unknown", "index": 0}], "reasoning_content": " as the"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " location parameter", "format": "unknown", "index": 0}], "reasoning_content": " location parameter"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". ", "format": "unknown", "index": 0}], "reasoning_content": ". "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "id": "functions.weather:0", "type": "function", "function": {"name": "weather", "arguments": ""}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": null, "role": "assistant", "tool_calls": [{"index": 0, "function": {"arguments": "{\"location\": \"Florence\"}"}}]}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " ", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}]} + + data: {"id": "gen-1773932889-tco5qSg4D8Z94K6GPhdr", "object": "chat.completion.chunk", "created": 1773932889, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "tool_calls", "native_finish_reason": "tool_calls"}], "usage": {"prompt_tokens": 76, "completion_tokens": 47, "total_tokens": 123, "cost": 0.0001232, "prompt_tokens_details": {"cached_tokens": 64, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 34, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 425.380292ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 897 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"content":" ","tool_calls":[{"id":"functions.weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_content":"I need to get the weather information for Florence, Italy. I''ll call the weather function with \"Florence\" as the location parameter. "},{"content":"40 C","tool_call_id":"functions.weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://api.avian.io/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id": "chatcmpl-6134a71fef4d44bfa96e800f", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "The", "format": "unknown", "index": 0}], "reasoning_content": "The"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " weather", "format": "unknown", "index": 0}], "reasoning_content": " weather"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " function returned", "format": "unknown", "index": 0}], "reasoning_content": " function returned"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " \"", "format": "unknown", "index": 0}], "reasoning_content": " \""}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "40 C", "format": "unknown", "index": 0}], "reasoning_content": "40 C"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": "\" which", "format": "unknown", "index": 0}], "reasoning_content": "\" which"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " means", "format": "unknown", "index": 0}], "reasoning_content": " means"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it's", "format": "unknown", "index": 0}], "reasoning_content": " it's"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " 40", "format": "unknown", "index": 0}], "reasoning_content": " 40"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " degrees Celsius", "format": "unknown", "index": 0}], "reasoning_content": " degrees Celsius"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " in Florence", "format": "unknown", "index": 0}], "reasoning_content": " in Florence"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". This", "format": "unknown", "index": 0}], "reasoning_content": ". This"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " is quite", "format": "unknown", "index": 0}], "reasoning_content": " is quite"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " hot!", "format": "unknown", "index": 0}], "reasoning_content": " hot!"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " I should", "format": "unknown", "index": 0}], "reasoning_content": " I should"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " report", "format": "unknown", "index": 0}], "reasoning_content": " report"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " this to", "format": "unknown", "index": 0}], "reasoning_content": " this to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " the user", "format": "unknown", "index": 0}], "reasoning_content": " the user"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " and", "format": "unknown", "index": 0}], "reasoning_content": " and"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " perhaps convert", "format": "unknown", "index": 0}], "reasoning_content": " perhaps convert"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " it to", "format": "unknown", "index": 0}], "reasoning_content": " it to"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " Fahrenheit as", "format": "unknown", "index": 0}], "reasoning_content": " Fahrenheit as"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " well for", "format": "unknown", "index": 0}], "reasoning_content": " well for"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " better", "format": "unknown", "index": 0}], "reasoning_content": " better"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": " context", "format": "unknown", "index": 0}], "reasoning_content": " context"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_details": [{"type": "reasoning.text", "text": ". ", "format": "unknown", "index": 0}], "reasoning_content": ". "}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " The", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " weather in", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Florence,", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " Italy is", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " currently **", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "40°C", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " (", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "104°F", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": ")** -", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " that's", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " quite hot", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "! Make", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " sure to", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " stay hydrated", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " and take", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " precautions if", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " you're planning", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " to be", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": " outdoors.", "role": "assistant"}, "finish_reason": null, "native_finish_reason": null}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant", "reasoning_content": null}, "finish_reason": "stop", "native_finish_reason": "stop"}]} + + data: {"id": "gen-1773932891-itZRH9Z0JMWEfAojMrcI", "object": "chat.completion.chunk", "created": 1773932891, "model": "moonshotai/kimi-k2.5", "choices": [{"index": 0, "delta": {"content": "", "role": "assistant"}, "finish_reason": "stop", "native_finish_reason": "stop"}], "usage": {"prompt_tokens": 145, "completion_tokens": 78, "total_tokens": 223, "cost": 0.00022245, "prompt_tokens_details": {"cached_tokens": 64, "cache_write_tokens": 0, "audio_tokens": 0, "video_tokens": 0}, "completion_tokens_details": {"reasoning_tokens": 51, "image_tokens": 0, "audio_tokens": 0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 417.109875ms From dff62fadc1831c5cf13e3c05aafa8040a6bcacf6 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Thu, 19 Mar 2026 13:00:44 -0400 Subject: [PATCH 08/32] fix(openai): skip reasoning items in Responses API replay (#181) When Store is enabled, replaying reasoning items (OfReasoning) in the Responses API input causes a validation error: Item 'rs_xxx' of type 'reasoning' was provided without its required following item. The API stores reasoning server-side and cannot pair a reconstructed reasoning item with the output item that originally followed it. The fix skips reasoning parts during replay, letting the conversation continue with visible assistant content (text / tool calls). --- providers/openai/openai_test.go | 88 ++++++++++++++++++-- providers/openai/responses_language_model.go | 15 +++- 2 files changed, 93 insertions(+), 10 deletions(-) diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index f517e8e3f..dde9080ae 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -3105,7 +3105,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 1, "should only have user message") require.Len(t, warnings, 1) @@ -3131,7 +3131,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 2, "should have both user and assistant messages") require.Empty(t, warnings) @@ -3159,7 +3159,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 2, "should have both user and assistant messages") require.Empty(t, warnings) @@ -3180,7 +3180,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Empty(t, input) require.Len(t, warnings, 2) // One for unsupported type, one for empty message @@ -3202,7 +3202,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 1) require.Empty(t, warnings) @@ -3223,7 +3223,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 1) require.Empty(t, warnings) @@ -3244,7 +3244,7 @@ func TestResponsesToPrompt_DropsEmptyMessages(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system") + input, warnings := toResponsesPrompt(prompt, "system", false) require.Len(t, input, 1) require.Empty(t, warnings) @@ -3874,7 +3874,7 @@ func TestResponsesToPrompt_WebSearchProviderExecutedToolResults(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system instructions") + input, warnings := toResponsesPrompt(prompt, "system instructions", false) require.Empty(t, warnings) @@ -3886,6 +3886,78 @@ func TestResponsesToPrompt_WebSearchProviderExecutedToolResults(t *testing.T) { "expected user + item_reference + assistant text") } +func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { + t.Parallel() + + encryptedContent := "gAAAAABpvAwtDPh5dSXW86hwbwoTo4DJHANQ" + reasoningItemID := "rs_08d030b87966238b0069bc095b7e5c81" + + reasoningPart := fantasy.ReasoningPart{ + Text: "Let me think about this...", + ProviderOptions: fantasy.ProviderOptions{ + Name: &ResponsesReasoningMetadata{ + ItemID: reasoningItemID, + EncryptedContent: &encryptedContent, + Summary: []string{}, + }, + }, + } + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "What is 2+2?"}, + }, + }, + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + reasoningPart, + fantasy.TextPart{Text: "4"}, + }, + }, + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "And 3+3?"}, + }, + }, + } + + t.Run("store true skips reasoning", func(t *testing.T) { + t.Parallel() + + input, warnings := toResponsesPrompt(prompt, "system", true) + require.Empty(t, warnings) + + // With store=true: user, assistant text (reasoning + // skipped), follow-up user. + require.Len(t, input, 3) + + // Verify no reasoning item leaked through. + for _, item := range input { + require.Nil(t, item.OfReasoning, + "reasoning items must not appear when store=true") + } + }) + + t.Run("store false includes reasoning", func(t *testing.T) { + t.Parallel() + + input, warnings := toResponsesPrompt(prompt, "system", false) + require.Empty(t, warnings) + + // With store=false: user, reasoning, assistant text, + // follow-up user. + require.Len(t, input, 4) + + // Second item should be the reasoning. + require.NotNil(t, input[1].OfReasoning) + require.Equal(t, reasoningItemID, input[1].OfReasoning.ID) + }) +} + func TestResponsesStream_WebSearchResponse(t *testing.T) { t.Parallel() diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index dc11e5eb6..f24dd07c1 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -176,7 +176,8 @@ func (o responsesLanguageModel) prepareParams(call fantasy.Call) (*responses.Res params.PreviousResponseID = param.NewOpt(*openaiOptions.PreviousResponseID) } - input, inputWarnings := toResponsesPrompt(call.Prompt, modelConfig.systemMessageMode) + storeEnabled := openaiOptions != nil && openaiOptions.Store != nil && *openaiOptions.Store + input, inputWarnings := toResponsesPrompt(call.Prompt, modelConfig.systemMessageMode, storeEnabled) warnings = append(warnings, inputWarnings...) var include []IncludeType @@ -391,7 +392,7 @@ func responsesUsage(resp responses.Response) fantasy.Usage { return usage } -func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string) (responses.ResponseInputParam, []fantasy.CallWarning) { +func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bool) (responses.ResponseInputParam, []fantasy.CallWarning) { var input responses.ResponseInputParam var warnings []fantasy.CallWarning @@ -560,6 +561,16 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string) (respons // recognised Responses API input type; skip. continue case fantasy.ContentTypeReasoning: + if store { + // When Store is enabled the API already has the + // reasoning persisted server-side. Replaying the + // full OfReasoning item causes a validation error + // ("reasoning was provided without its required + // following item") because the API cannot pair the + // reconstructed reasoning with the output item + // that followed it. + continue + } reasoningMetadata := GetReasoningMetadata(c.Options()) if reasoningMetadata == nil || reasoningMetadata.ItemID == "" { continue From 43df1e4fba97e6b87281818697133118ab811735 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 13 Mar 2026 10:17:27 -0300 Subject: [PATCH 09/32] chore: revert change to skip user-agent for openrouter --- providers/openai/call_useragent.go | 10 ++---- providers/openai/language_model.go | 19 +++-------- providers/openai/openai.go | 35 +++----------------- providers/openai/responses_language_model.go | 28 ++++++++-------- providers/openrouter/openrouter.go | 1 - providers/openrouter/useragent_test.go | 2 +- 6 files changed, 25 insertions(+), 70 deletions(-) diff --git a/providers/openai/call_useragent.go b/providers/openai/call_useragent.go index 777a19d3f..fe9b4822d 100644 --- a/providers/openai/call_useragent.go +++ b/providers/openai/call_useragent.go @@ -13,10 +13,7 @@ import ( // When noDefaultUA is true the SDK's own User-Agent is preserved and no // override is applied (needed for providers like OpenRouter, which reject // User-Agent headers they don't expect). -func callUARequestOptions(call fantasy.Call, noDefaultUA bool) []option.RequestOption { - if noDefaultUA { - return nil - } +func callUARequestOptions(call fantasy.Call) []option.RequestOption { if ua, ok := httpheaders.CallUserAgent(call.UserAgent); ok { return []option.RequestOption{option.WithHeader("User-Agent", ua)} } @@ -26,10 +23,7 @@ func callUARequestOptions(call fantasy.Call, noDefaultUA bool) []option.RequestO // objectCallUARequestOptions returns per-request options that override the // client-level User-Agent header when the ObjectCall carries agent-level UA // settings. -func objectCallUARequestOptions(call fantasy.ObjectCall, noDefaultUA bool) []option.RequestOption { - if noDefaultUA { - return nil - } +func objectCallUARequestOptions(call fantasy.ObjectCall) []option.RequestOption { if ua, ok := httpheaders.CallUserAgent(call.UserAgent); ok { return []option.RequestOption{option.WithHeader("User-Agent", ua)} } diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 0679aa3f5..0445a6104 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -32,7 +32,6 @@ type languageModel struct { streamExtraFunc LanguageModelStreamExtraFunc streamProviderMetadataFunc LanguageModelStreamProviderMetadataFunc toPromptFunc LanguageModelToPromptFunc - noDefaultUserAgent bool } // LanguageModelOption is a function that configures a languageModel. @@ -87,16 +86,6 @@ func WithLanguageModelToPromptFunc(fn LanguageModelToPromptFunc) LanguageModelOp } } -// WithLanguageModelSkipUserAgent prevents per-call User-Agent overrides. This -// exists solely for OpenRouter, which rejects User-Agent overrides. -// -// This function is provisional and may be removed in a future release. -func WithLanguageModelSkipUserAgent() LanguageModelOption { - return func(l *languageModel) { - l.noDefaultUserAgent = true - } -} - // WithLanguageModelObjectMode sets the object generation mode. func WithLanguageModelObjectMode(om fantasy.ObjectMode) LanguageModelOption { return func(l *languageModel) { @@ -257,7 +246,7 @@ func (o languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas if err != nil { return nil, err } - response, err := o.client.Chat.Completions.New(ctx, *params, callUARequestOptions(call, o.noDefaultUserAgent)...) + response, err := o.client.Chat.Completions.New(ctx, *params, callUARequestOptions(call)...) if err != nil { return nil, toProviderErr(err) } @@ -325,7 +314,7 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S IncludeUsage: openai.Bool(true), } - stream := o.client.Chat.Completions.NewStreaming(ctx, *params, callUARequestOptions(call, o.noDefaultUserAgent)...) + stream := o.client.Chat.Completions.NewStreaming(ctx, *params, callUARequestOptions(call)...) isActiveText := false toolCalls := make(map[int64]streamToolCall) @@ -744,7 +733,7 @@ func (o languageModel) generateObjectWithJSONMode(ctx context.Context, call fant }, } - response, err := o.client.Chat.Completions.New(ctx, *params, objectCallUARequestOptions(call, o.noDefaultUserAgent)...) + response, err := o.client.Chat.Completions.New(ctx, *params, objectCallUARequestOptions(call)...) if err != nil { return nil, toProviderErr(err) } @@ -828,7 +817,7 @@ func (o languageModel) streamObjectWithJSONMode(ctx context.Context, call fantas IncludeUsage: openai.Bool(true), } - stream := o.client.Chat.Completions.NewStreaming(ctx, *params, objectCallUARequestOptions(call, o.noDefaultUserAgent)...) + stream := o.client.Chat.Completions.NewStreaming(ctx, *params, objectCallUARequestOptions(call)...) return func(yield func(fantasy.ObjectStreamPart) bool) { if len(warnings) > 0 { diff --git a/providers/openai/openai.go b/providers/openai/openai.go index fb9e7838d..51ebf4845 100644 --- a/providers/openai/openai.go +++ b/providers/openai/openai.go @@ -32,7 +32,6 @@ type options struct { useResponsesAPI bool headers map[string]string userAgent string - noDefaultUserAgent bool client option.HTTPClient sdkOptions []option.RequestOption objectMode fantasy.ObjectMode @@ -143,18 +142,6 @@ func WithUserAgent(ua string) Option { } } -// WithSkipUserAgent prevents the provider from setting a default -// User-Agent header, preserving the underlying SDK's own User-Agent. -// This is needed for providers like OpenRouter whose API behaviour depends -// on the User-Agent matching the SDK that is making the request. -// -// This function is provisional and may be removed in a future release. -func WithSkipUserAgent() Option { - return func(o *options) { - o.noDefaultUserAgent = true - } -} - // WithObjectMode sets the object generation mode. func WithObjectMode(om fantasy.ObjectMode) Option { return func(o *options) { @@ -178,19 +165,10 @@ func (o *provider) LanguageModel(_ context.Context, modelID string) (fantasy.Lan openaiClientOptions = append(openaiClientOptions, option.WithBaseURL(o.options.baseURL)) } - if o.options.noDefaultUserAgent { - for key, value := range o.options.headers { - openaiClientOptions = append(openaiClientOptions, option.WithHeader(key, value)) - } - if o.options.userAgent != "" { - openaiClientOptions = append(openaiClientOptions, option.WithHeader("User-Agent", o.options.userAgent)) - } - } else { - defaultUA := httpheaders.DefaultUserAgent(fantasy.Version) - resolved := httpheaders.ResolveHeaders(o.options.headers, o.options.userAgent, defaultUA) - for key, value := range resolved { - openaiClientOptions = append(openaiClientOptions, option.WithHeader(key, value)) - } + defaultUA := httpheaders.DefaultUserAgent(fantasy.Version) + resolved := httpheaders.ResolveHeaders(o.options.headers, o.options.userAgent, defaultUA) + for key, value := range resolved { + openaiClientOptions = append(openaiClientOptions, option.WithHeader(key, value)) } if o.options.client != nil { @@ -207,14 +185,11 @@ func (o *provider) LanguageModel(_ context.Context, modelID string) (fantasy.Lan if objectMode == fantasy.ObjectModeJSON { objectMode = fantasy.ObjectModeAuto } - return newResponsesLanguageModel(modelID, o.options.name, client, objectMode, o.options.noDefaultUserAgent), nil + return newResponsesLanguageModel(modelID, o.options.name, client, objectMode), nil } languageModelOptions := append([]LanguageModelOption{}, o.options.languageModelOptions...) languageModelOptions = append(languageModelOptions, WithLanguageModelObjectMode(o.options.objectMode)) - if o.options.noDefaultUserAgent { - languageModelOptions = append(languageModelOptions, WithLanguageModelSkipUserAgent()) - } return newLanguageModel( modelID, diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index f24dd07c1..5f22735f7 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -22,21 +22,19 @@ import ( const topLogprobsMax = 20 type responsesLanguageModel struct { - provider string - modelID string - client openai.Client - objectMode fantasy.ObjectMode - noDefaultUserAgent bool + provider string + modelID string + client openai.Client + objectMode fantasy.ObjectMode } // newResponsesLanguageModel implements a responses api model. -func newResponsesLanguageModel(modelID string, provider string, client openai.Client, objectMode fantasy.ObjectMode, noDefaultUserAgent bool) responsesLanguageModel { +func newResponsesLanguageModel(modelID string, provider string, client openai.Client, objectMode fantasy.ObjectMode) responsesLanguageModel { return responsesLanguageModel{ - modelID: modelID, - provider: provider, - client: client, - objectMode: objectMode, - noDefaultUserAgent: noDefaultUserAgent, + modelID: modelID, + provider: provider, + client: client, + objectMode: objectMode, } } @@ -771,7 +769,7 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) return nil, err } - response, err := o.client.Responses.New(ctx, *params, callUARequestOptions(call, o.noDefaultUserAgent)...) + response, err := o.client.Responses.New(ctx, *params, callUARequestOptions(call)...) if err != nil { return nil, toProviderErr(err) } @@ -922,7 +920,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( return nil, err } - stream := o.client.Responses.NewStreaming(ctx, *params, callUARequestOptions(call, o.noDefaultUserAgent)...) + stream := o.client.Responses.NewStreaming(ctx, *params, callUARequestOptions(call)...) finishReason := fantasy.FinishReasonUnknown var usage fantasy.Usage @@ -1329,7 +1327,7 @@ func (o responsesLanguageModel) generateObjectWithJSONMode(ctx context.Context, } // Make request - response, err := o.client.Responses.New(ctx, *params, objectCallUARequestOptions(call, o.noDefaultUserAgent)...) + response, err := o.client.Responses.New(ctx, *params, objectCallUARequestOptions(call)...) if err != nil { return nil, toProviderErr(err) } @@ -1432,7 +1430,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca Format: responses.ResponseFormatTextConfigParamOfJSONSchema(schemaName, jsonSchemaMap), } - stream := o.client.Responses.NewStreaming(ctx, *params, objectCallUARequestOptions(call, o.noDefaultUserAgent)...) + stream := o.client.Responses.NewStreaming(ctx, *params, objectCallUARequestOptions(call)...) return func(yield func(fantasy.ObjectStreamPart) bool) { if len(warnings) > 0 { diff --git a/providers/openrouter/openrouter.go b/providers/openrouter/openrouter.go index 36b066c0a..623186bc6 100644 --- a/providers/openrouter/openrouter.go +++ b/providers/openrouter/openrouter.go @@ -31,7 +31,6 @@ func New(opts ...Option) (fantasy.Provider, error) { openaiOptions: []openai.Option{ openai.WithName(Name), openai.WithBaseURL(DefaultURL), - openai.WithSkipUserAgent(), }, languageModelOptions: []openai.LanguageModelOption{ openai.WithLanguageModelPrepareCallFunc(languagePrepareModelCall), diff --git a/providers/openrouter/useragent_test.go b/providers/openrouter/useragent_test.go index 14f1d17ff..5c38db8ea 100644 --- a/providers/openrouter/useragent_test.go +++ b/providers/openrouter/useragent_test.go @@ -57,7 +57,7 @@ func TestUserAgent(t *testing.T) { _, _ = model.Generate(t.Context(), fantasy.Call{Prompt: prompt}) require.Len(t, *captured, 1) - assert.True(t, strings.HasPrefix((*captured)[0]["User-Agent"], "OpenAI/Go")) + assert.True(t, strings.HasPrefix((*captured)[0]["User-Agent"], "Charm-Fantasy/")) }) t.Run("WithUserAgent wins over default", func(t *testing.T) { From b00cf24a6b7c3cc668edfd7b819daa77cb94c417 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 15:39:52 -0300 Subject: [PATCH 10/32] chore: remove unused test function --- providertests/object_test.go | 51 ------------------------------------ 1 file changed, 51 deletions(-) diff --git a/providertests/object_test.go b/providertests/object_test.go index 9c91e3318..f5e9b791e 100644 --- a/providertests/object_test.go +++ b/providertests/object_test.go @@ -1,7 +1,6 @@ package providertests import ( - "context" "strings" "testing" @@ -370,53 +369,3 @@ func testComplexObject(t *testing.T, pair builderPair) { require.Greater(t, year, 1900.0, "published_year should be after 1900") }) } - -// testObjectWithRepair tests object generation with custom repair functionality. -func testObjectWithRepair(t *testing.T, pairs []builderPair) { - for _, pair := range pairs { - t.Run(pair.name, func(t *testing.T) { - t.Run("object with repair", func(t *testing.T) { - r := vcr.NewRecorder(t) - - languageModel, err := pair.builder(t, r) - require.NoError(t, err, "failed to build language model") - - minVal := 1.0 - schema := fantasy.Schema{ - Type: "object", - Properties: map[string]*fantasy.Schema{ - "count": { - Type: "integer", - Description: "A count that must be positive", - Minimum: &minVal, - }, - }, - Required: []string{"count"}, - } - - prompt := fantasy.Prompt{ - fantasy.NewUserMessage("Return a count of 5"), - } - - repairFunc := func(ctx context.Context, text string, err error) (string, error) { - // Simple repair: if the JSON is malformed, try to fix it - // This is a placeholder - real repair would be more sophisticated - return text, nil - } - - response, err := languageModel.GenerateObject(t.Context(), fantasy.ObjectCall{ - Prompt: prompt, - Schema: schema, - SchemaName: "Count", - SchemaDescription: "A simple count object", - MaxOutputTokens: fantasy.Opt(int64(4000)), - RepairText: repairFunc, - ProviderOptions: pair.providerOptions, - }) - require.NoError(t, err, "failed to generate object") - require.NotNil(t, response, "response should not be nil") - require.NotNil(t, response.Object, "object should not be nil") - }) - }) - } -} From c3f0da5c095b3809ff083bbb996ffdc0f64bf7d6 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 15:40:50 -0300 Subject: [PATCH 11/32] test(openrouter): simplify list of providers and models to test Make it shorter (one per major provider) and favor smaller models. --- providertests/openrouter_test.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/providertests/openrouter_test.go b/providertests/openrouter_test.go index f2e53c695..b4b36627e 100644 --- a/providertests/openrouter_test.go +++ b/providertests/openrouter_test.go @@ -13,16 +13,12 @@ import ( ) var openrouterTestModels = []testModel{ - {"kimi-k2", "moonshotai/kimi-k2-0905", false}, - {"grok-code-fast-1", "x-ai/grok-code-fast-1", true}, - {"claude-sonnet-4", "anthropic/claude-sonnet-4", true}, - {"gemini-2.5-flash", "google/gemini-2.5-flash", false}, - {"deepseek/deepseek-v3.2", "deepseek/deepseek-v3.2", false}, - {"qwen3-235b-a22b-2507", "qwen/qwen3-235b-a22b-2507", false}, - {"gpt-5", "openai/gpt-5", true}, - {"gemini-3-pro-preview", "google/gemini-3-pro-preview", true}, - {"glm-4.5", "z-ai/glm-4.5", false}, - {"glm-4.6", "z-ai/glm-4.6", true}, + {"anthropic", "anthropic/claude-haiku-4.5", false}, + {"openai", "openai/gpt-5.4-nano", false}, + {"gemini", "google/gemini-3.1-flash-lite-preview", false}, + {"grok", "x-ai/grok-4.1-fast", false}, + {"glm", "z-ai/glm-5-turbo", false}, + {"kimi", "moonshotai/kimi-k2.5", false}, } func TestOpenRouterCommon(t *testing.T) { @@ -35,7 +31,7 @@ func TestOpenRouterCommon(t *testing.T) { func TestOpenRouterCommonWithAnthropicCache(t *testing.T) { testCommon(t, []builderPair{ - {"claude-sonnet-4", openrouterBuilder("anthropic/claude-sonnet-4"), nil, addAnthropicCaching}, + {"anthropic", openrouterBuilder("anthropic/claude-haiku-4.5"), nil, addAnthropicCaching}, }) } @@ -59,7 +55,7 @@ func TestOpenRouterThinking(t *testing.T) { // test anthropic signature testThinking(t, []builderPair{ - {"claude-sonnet-4-sig", openrouterBuilder("anthropic/claude-sonnet-4"), opts, nil}, + {"anthropic", openrouterBuilder("anthropic/claude-haiku-4.5"), opts, nil}, }, testOpenrouterThinkingWithSignature) } From 5e4a4438f6dd9a60cefc0e26e948e6ac7a244e83 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 15:41:30 -0300 Subject: [PATCH 12/32] test: re-record openrouter fixtures --- .../anthropic/multi_tool.yaml | 63 + .../anthropic/multi_tool_streaming.yaml | 141 ++ .../anthropic/simple.yaml | 33 + .../anthropic/simple_streaming.yaml | 32 + .../TestOpenRouterCommon/anthropic/tool.yaml | 63 + .../anthropic/tool_streaming.yaml | 169 ++ .../claude-sonnet-4/multi_tool.yaml | 63 - .../claude-sonnet-4/multi_tool_streaming.yaml | 117 -- .../claude-sonnet-4/simple.yaml | 33 - .../claude-sonnet-4/simple_streaming.yaml | 40 - .../claude-sonnet-4/tool.yaml | 63 - .../claude-sonnet-4/tool_streaming.yaml | 117 -- .../deepseek/deepseek-v3.2/multi_tool.yaml | 63 - .../deepseek-v3.2/multi_tool_streaming.yaml | 165 -- .../deepseek/deepseek-v3.2/simple.yaml | 33 - .../deepseek-v3.2/simple_streaming.yaml | 42 - .../deepseek/deepseek-v3.2/tool.yaml | 63 - .../deepseek-v3.2/tool_streaming.yaml | 107 -- .../gemini-2.5-flash/multi_tool.yaml | 63 - .../multi_tool_streaming.yaml | 87 -- .../gemini-2.5-flash/simple.yaml | 33 - .../gemini-2.5-flash/simple_streaming.yaml | 42 - .../gemini-2.5-flash/tool.yaml | 63 - .../gemini-2.5-flash/tool_streaming.yaml | 81 - .../gemini-3-pro-preview/multi_tool.yaml | 63 - .../multi_tool_streaming.yaml | 93 -- .../gemini-3-pro-preview/simple.yaml | 33 - .../simple_streaming.yaml | 46 - .../gemini-3-pro-preview/tool.yaml | 63 - .../gemini-3-pro-preview/tool_streaming.yaml | 85 - .../gemini/multi_tool.yaml | 63 + .../gemini/multi_tool_streaming.yaml | 121 ++ .../TestOpenRouterCommon/gemini/simple.yaml | 33 + .../gemini/simple_streaming.yaml | 46 + .../TestOpenRouterCommon/gemini/tool.yaml | 63 + .../gemini/tool_streaming.yaml | 113 ++ .../glm-4.5/multi_tool.yaml | 63 - .../glm-4.5/multi_tool_streaming.yaml | 405 ----- .../TestOpenRouterCommon/glm-4.5/simple.yaml | 33 - .../glm-4.5/simple_streaming.yaml | 204 --- .../TestOpenRouterCommon/glm-4.5/tool.yaml | 63 - .../glm-4.5/tool_streaming.yaml | 371 ----- .../glm-4.6/multi_tool.yaml | 63 - .../glm-4.6/multi_tool_streaming.yaml | 361 ----- .../TestOpenRouterCommon/glm-4.6/simple.yaml | 33 - .../glm-4.6/simple_streaming.yaml | 1388 ----------------- .../TestOpenRouterCommon/glm-4.6/tool.yaml | 63 - .../glm-4.6/tool_streaming.yaml | 319 ---- .../TestOpenRouterCommon/glm/multi_tool.yaml | 63 + .../glm/multi_tool_streaming.yaml | 171 ++ .../TestOpenRouterCommon/glm/simple.yaml | 33 + .../glm/simple_streaming.yaml | 562 +++++++ .../TestOpenRouterCommon/glm/tool.yaml | 63 + .../glm/tool_streaming.yaml | 133 ++ .../gpt-5/multi_tool.yaml | 63 - .../gpt-5/multi_tool_streaming.yaml | 261 ---- .../TestOpenRouterCommon/gpt-5/simple.yaml | 33 - .../gpt-5/simple_streaming.yaml | 192 --- .../TestOpenRouterCommon/gpt-5/tool.yaml | 63 - .../gpt-5/tool_streaming.yaml | 555 ------- .../grok-code-fast-1/multi_tool.yaml | 63 - .../multi_tool_streaming.yaml | 273 ---- .../grok-code-fast-1/simple.yaml | 33 - .../grok-code-fast-1/simple_streaming.yaml | 150 -- .../grok-code-fast-1/tool.yaml | 63 - .../grok-code-fast-1/tool_streaming.yaml | 187 --- .../TestOpenRouterCommon/grok/multi_tool.yaml | 63 + .../grok/multi_tool_streaming.yaml | 243 +++ .../TestOpenRouterCommon/grok/simple.yaml | 33 + .../grok/simple_streaming.yaml | 32 + .../TestOpenRouterCommon/grok/tool.yaml | 63 + .../grok/tool_streaming.yaml | 181 +++ .../kimi-k2/multi_tool.yaml | 63 - .../kimi-k2/multi_tool_streaming.yaml | 239 --- .../TestOpenRouterCommon/kimi-k2/simple.yaml | 33 - .../kimi-k2/simple_streaming.yaml | 42 - .../TestOpenRouterCommon/kimi-k2/tool.yaml | 63 - .../kimi-k2/tool_streaming.yaml | 161 -- .../TestOpenRouterCommon/kimi/multi_tool.yaml | 63 + .../kimi/multi_tool_streaming.yaml | 471 ++++++ .../TestOpenRouterCommon/kimi/simple.yaml | 33 + .../kimi/simple_streaming.yaml | 430 +++++ .../TestOpenRouterCommon/kimi/tool.yaml | 63 + .../kimi/tool_streaming.yaml | 311 ++++ .../openai/multi_tool.yaml | 63 + .../openai/multi_tool_streaming.yaml | 127 ++ .../TestOpenRouterCommon/openai/simple.yaml | 33 + .../openai/simple_streaming.yaml | 32 + .../TestOpenRouterCommon/openai/tool.yaml | 63 + .../openai/tool_streaming.yaml | 129 ++ .../qwen3-235b-a22b-2507/multi_tool.yaml | 63 - .../multi_tool_streaming.yaml | 113 -- .../qwen3-235b-a22b-2507/simple.yaml | 33 - .../simple_streaming.yaml | 44 - .../qwen3-235b-a22b-2507/tool.yaml | 63 - .../qwen3-235b-a22b-2507/tool_streaming.yaml | 97 -- .../anthropic/multi_tool.yaml | 63 + .../anthropic/multi_tool_streaming.yaml | 139 ++ .../anthropic/simple.yaml | 33 + .../anthropic/simple_streaming.yaml | 32 + .../anthropic/tool.yaml | 63 + .../anthropic/tool_streaming.yaml | 141 ++ .../claude-sonnet-4/multi_tool.yaml | 63 - .../claude-sonnet-4/multi_tool_streaming.yaml | 117 -- .../claude-sonnet-4/simple.yaml | 33 - .../claude-sonnet-4/simple_streaming.yaml | 66 - .../claude-sonnet-4/tool.yaml | 63 - .../claude-sonnet-4/tool_streaming.yaml | 115 -- .../anthropic/thinking-streaming.yaml | 177 +++ .../anthropic/thinking.yaml | 63 + .../thinking-streaming.yaml | 137 -- .../claude-sonnet-4-sig/thinking.yaml | 63 - .../claude-sonnet-4/thinking-streaming.yaml | 139 -- .../claude-sonnet-4/thinking.yaml | 63 - .../thinking-streaming.yaml | 87 -- .../gemini-3-pro-preview/thinking.yaml | 63 - .../glm-4.6/thinking-streaming.yaml | 347 ----- .../glm-4.6/thinking.yaml | 63 - .../gpt-5/thinking-streaming.yaml | 307 ---- .../gpt-5/thinking.yaml | 63 - .../grok-code-fast-1/thinking-streaming.yaml | 287 ---- .../grok-code-fast-1/thinking.yaml | 63 - 122 files changed, 5109 insertions(+), 10113 deletions(-) create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.5/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/glm-4.6/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/gpt-5/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/kimi-k2/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml create mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple_streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool.yaml delete mode 100644 providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool_streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml create mode 100644 providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/gpt-5/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/gpt-5/thinking.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking-streaming.yaml delete mode 100644 providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking.yaml diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml new file mode 100644 index 000000000..07256ce25 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 856 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945358-FDlyLIKJQBIXIh4OyuLo\",\"object\":\"chat.completion\",\"created\":1773945358,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 4.230596708s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1311 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945363-bjEDpfY1yMWlhRQEtwaa\",\"object\":\"chat.completion\",\"created\":1773945363,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Adding** 2 + 3 = **5**\\n- **Multiplying** 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":44,\"total_tokens\":915,\"cost\":0.001091,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001091,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.00022},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.332091s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml new file mode 100644 index 000000000..303f2ddcb --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml @@ -0,0 +1,141 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 893 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 3.905948833s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1348 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Perfect","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" are the results:\n\n- **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":866,"completion_tokens":43,"total_tokens":909,"cost":0.001081,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001081,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000215},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.608417583s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml new file mode 100644 index 000000000..759541e67 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 201 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945333-8woqHhslWkUBof9rDT5h\",\"object\":\"chat.completion\",\"created\":1773945333,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\\n\\n(or \\\"Oi!\\\" for a more casual greeting)\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.234733708s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml new file mode 100644 index 000000000..930a91517 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml @@ -0,0 +1,32 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 255 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\n(\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Or\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\\"\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi!\\\" for\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" a\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" more casual greeting)\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 6.406652583s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml new file mode 100644 index 000000000..2baf6de70 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 493 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945342-jKAAVEw88x4puynntZ3C\",\"object\":\"chat.completion\",\"created\":1773945342,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 5.041391041s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 758 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945347-FZ9S04kVlZRXgrWCIN1o\",\"object\":\"chat.completion\",\"created\":1773945347,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is **40°C (104°F)**, which is quite hot! This is typical for Florence during the summer months, particularly in July and August when temperatures often reach or exceed 40°C. If you're planning a visit or are currently there, make sure to stay hydrated and use sun protection.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":73,\"total_tokens\":719,\"cost\":0.001011,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001011,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.000365},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 5.138797333s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml new file mode 100644 index 000000000..6bd69861a --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml @@ -0,0 +1,169 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 547 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \"Florence,"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.738503458s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 812 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" \n\nThis","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is typical","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" for Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" during","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer months when","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" temperatures","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" can be","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" quite warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'d recommend:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"\n- Staying","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated\n- Wearing light,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" breathable clothing\n- Using","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" protection (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"screen, hat, sunglasses)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"\n- Planning","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" outdoor activities for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" early","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" morning or late evening","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" avoid the heat of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" the day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":646,"completion_tokens":96,"total_tokens":742,"cost":0.001126,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001126,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.00048},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.818862708s diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool.yaml deleted file mode 100644 index 6238a378a..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 855 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323540-GMKB7AKBdj2BQpQEkGHO\",\"object\":\"chat.completion\",\"created\":1773323540,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply the numbers 2 and 3 for you.\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_01CrwT5W3QNtyBVRA3nAPzUp\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_vrtx_0146kPvSq635LRm2USSvDtM9\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":507,\"completion_tokens\":137,\"total_tokens\":644,\"cost\":0.003576,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.003576,\"upstream_inference_prompt_cost\":0.001521,\"upstream_inference_completions_cost\":0.002055},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 903.432416ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1373 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"toolu_vrtx_01CrwT5W3QNtyBVRA3nAPzUp","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_vrtx_0146kPvSq635LRm2USSvDtM9","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_vrtx_01CrwT5W3QNtyBVRA3nAPzUp","role":"tool"},{"content":"6","tool_call_id":"toolu_vrtx_0146kPvSq635LRm2USSvDtM9","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773323541-QBUWUTUbDaqymBDVEuoE\",\"object\":\"chat.completion\",\"created\":1773323541,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The results are:\\n- 2 + 3 = 5\\n- 2 × 3 = 6\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":705,\"completion_tokens\":31,\"total_tokens\":736,\"cost\":0.00258,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00258,\"upstream_inference_prompt_cost\":0.002115,\"upstream_inference_completions_cost\":0.000465},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.30722575s diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool_streaming.yaml deleted file mode 100644 index f327e6363..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/multi_tool_streaming.yaml +++ /dev/null @@ -1,117 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 892 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"I'll add and multiply the numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 2 and 3 for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" you.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_012sEiA1ajGbPds1mUPKdMnU","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\": "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_vrtx_012fhTq4abLcwbgsKbdfgVPA","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323543-geHAkHUSSkZsqY28AQTy","object":"chat.completion.chunk","created":1773323543,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":502,"completion_tokens":137,"total_tokens":639,"cost":0.003561,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.003561,"upstream_inference_prompt_cost":0.001506,"upstream_inference_completions_cost":0.002055},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 917.065042ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1410 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"toolu_vrtx_012sEiA1ajGbPds1mUPKdMnU","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_vrtx_012fhTq4abLcwbgsKbdfgVPA","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_vrtx_012sEiA1ajGbPds1mUPKdMnU","role":"tool"},{"content":"6","tool_call_id":"toolu_vrtx_012fhTq4abLcwbgsKbdfgVPA","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" are:\n- 2 +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 3 = 5\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323545-oAGngtaqrgPZPjMvn7RU","object":"chat.completion.chunk","created":1773323545,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":700,"completion_tokens":31,"total_tokens":731,"cost":0.002565,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002565,"upstream_inference_prompt_cost":0.0021,"upstream_inference_completions_cost":0.000465},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.143589583s diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple.yaml deleted file mode 100644 index 54d3ba5f5..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 200 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773323530-QEmpi7F7SRj0p4e9ja20\",\"object\":\"chat.completion\",\"created\":1773323530,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":7,\"total_tokens\":23,\"cost\":0.000153,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000153,\"upstream_inference_prompt_cost\":0.000048,\"upstream_inference_completions_cost\":0.000105},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.175311917s diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple_streaming.yaml deleted file mode 100644 index 6c1ad2d98..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/simple_streaming.yaml +++ /dev/null @@ -1,40 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 254 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323531-D7RR9I3I1lMzNDNfWzao","object":"chat.completion.chunk","created":1773323531,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"Olá!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323531-D7RR9I3I1lMzNDNfWzao","object":"chat.completion.chunk","created":1773323531,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323531-D7RR9I3I1lMzNDNfWzao","object":"chat.completion.chunk","created":1773323531,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":16,"completion_tokens":7,"total_tokens":23,"cost":0.000153,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000153,"upstream_inference_prompt_cost":0.000048,"upstream_inference_completions_cost":0.000105},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 890.029ms diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool.yaml deleted file mode 100644 index 486c068ae..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 492 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773323532-1mS9KNmcR9a15lyOpBt1\",\"object\":\"chat.completion\",\"created\":1773323532,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll get the current weather information for Florence, Italy.\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_016wvfRxzgyUV27vpoMsJi36\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence,Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":394,\"completion_tokens\":66,\"total_tokens\":460,\"cost\":0.002172,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002172,\"upstream_inference_prompt_cost\":0.001182,\"upstream_inference_completions_cost\":0.00099},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.07917925s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 830 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll get the current weather information for Florence, Italy.","tool_calls":[{"id":"toolu_vrtx_016wvfRxzgyUV27vpoMsJi36","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_vrtx_016wvfRxzgyUV27vpoMsJi36","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323534-wQioDfMwqpk3GMDwrf4r\",\"object\":\"chat.completion\",\"created\":1773323534,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C (104°F). That's quite hot! This is typical summer weather for the region. If you're planning to visit or are currently there, make sure to stay hydrated and seek shade during the hottest parts of the day.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":475,\"completion_tokens\":63,\"total_tokens\":538,\"cost\":0.00237,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00237,\"upstream_inference_prompt_cost\":0.001425,\"upstream_inference_completions_cost\":0.000945},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.488607917s diff --git a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool_streaming.yaml deleted file mode 100644 index 918ee41a8..000000000 --- a/providertests/testdata/TestOpenRouterCommon/claude-sonnet-4/tool_streaming.yaml +++ /dev/null @@ -1,117 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 546 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"I'll get","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" the weather information for Florence, Italy for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" you.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_015PkcPo9nLuQ3Lz4ELQueGM","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\": \"Floren"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ce"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":",Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323536-Ko6dI9bnZTkPeee45z6T","object":"chat.completion.chunk","created":1773323536,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":394,"completion_tokens":67,"total_tokens":461,"cost":0.002187,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002187,"upstream_inference_prompt_cost":0.001182,"upstream_inference_completions_cost":0.001005},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 948.437542ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 884 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll get the weather information for Florence, Italy for you.","tool_calls":[{"id":"toolu_vrtx_015PkcPo9nLuQ3Lz4ELQueGM","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_vrtx_015PkcPo9nLuQ3Lz4ELQueGM","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" temperature in Florence, Italy is 40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"°C (104°F). That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"'s quite hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" you're planning to visit or are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" currently there, make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" hydrated and seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" shade during the hottest parts","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" of the day.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323538-UfUcZg6x7EjgfGIP95rN","object":"chat.completion.chunk","created":1773323538,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":476,"completion_tokens":54,"total_tokens":530,"cost":0.002238,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002238,"upstream_inference_prompt_cost":0.001428,"upstream_inference_completions_cost":0.00081},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.039042791s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool.yaml deleted file mode 100644 index f3e9edb72..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 852 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323896-yilCh8sn1R8UFUbdxmGz\",\"object\":\"chat.completion\",\"created\":1773323896,\"model\":\"deepseek/deepseek-v3.2-20251201\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply the numbers 2 and 3 at the same time as required\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"11cf71f38f0b4894b68d75abb63dfbad\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"598d391f886f4aae9d12e1fe63701947\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":422,\"completion_tokens\":122,\"total_tokens\":544,\"cost\":0.00015608,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00015608,\"upstream_inference_prompt_cost\":0.00010972,\"upstream_inference_completions_cost\":0.00004636},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.419623959s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1378 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 at the same time as required","tool_calls":[{"id":"11cf71f38f0b4894b68d75abb63dfbad","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"598d391f886f4aae9d12e1fe63701947","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"11cf71f38f0b4894b68d75abb63dfbad","role":"tool"},{"content":"6","tool_call_id":"598d391f886f4aae9d12e1fe63701947","role":"tool"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323901-yNEwfFD1Mu1e66ZJ7PVt\",\"object\":\"chat.completion\",\"created\":1773323901,\"model\":\"deepseek/deepseek-v3.2-20251201\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Results:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":569,\"completion_tokens\":26,\"total_tokens\":595,\"cost\":0.00015782,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00015782,\"upstream_inference_prompt_cost\":0.00014794,\"upstream_inference_completions_cost\":0.00000988},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.833652167s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool_streaming.yaml deleted file mode 100644 index 3c1d215e4..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/multi_tool_streaming.yaml +++ /dev/null @@ -1,165 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 889 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"'ll help","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" you add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" and multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" numbers ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"2 and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" simultaneously as","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" requested.\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"0b9b65cb86084440a3ea7f75a9f20104","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\": 2, \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"5e95ae6f882c4547a01d7ed60da214f0","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\": 2, \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323904-gGztCi17vPKdNVkryZCS","object":"chat.completion.chunk","created":1773323904,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":416,"completion_tokens":123,"total_tokens":539,"cost":0.0001549,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0001549,"upstream_inference_prompt_cost":0.00010816,"upstream_inference_completions_cost":0.00004674},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.3461555s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1432 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll help you add and multiply the numbers 2 and 3 simultaneously as you requested.\n\n","tool_calls":[{"id":"0b9b65cb86084440a3ea7f75a9f20104","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"5e95ae6f882c4547a01d7ed60da214f0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"0b9b65cb86084440a3ea7f75a9f20104","role":"tool"},{"content":"6","tool_call_id":"5e95ae6f882c4547a01d7ed60da214f0","role":"tool"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" results are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":":\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"Addition**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" + ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" **Multiplication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"**: ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"2 ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" = ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"6\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"So","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" when","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" working","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" with the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" numbers ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"2 and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":":\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Their","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" sum is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Their product","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" is ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323909-d48dNrkwsHDs62ddmrgf","object":"chat.completion.chunk","created":1773323909,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":563,"completion_tokens":56,"total_tokens":619,"cost":0.00016766,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00016766,"upstream_inference_prompt_cost":0.00014638,"upstream_inference_completions_cost":0.00002128},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.468291333s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple.yaml deleted file mode 100644 index d1de1ab05..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 197 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323879-BNXjUOAjb0ekhuFzfdmG\",\"object\":\"chat.completion\",\"created\":1773323879,\"model\":\"deepseek/deepseek-v3.2-20251201\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F60A\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":13,\"completion_tokens\":6,\"total_tokens\":19,\"cost\":0.00000566,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00000566,\"upstream_inference_prompt_cost\":0.00000338,\"upstream_inference_completions_cost\":0.00000228},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.374466917s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple_streaming.yaml deleted file mode 100644 index e37350e27..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/simple_streaming.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 251 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323881-sbeSbTHCeTso0VvT2Trm","object":"chat.completion.chunk","created":1773323881,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323881-sbeSbTHCeTso0VvT2Trm","object":"chat.completion.chunk","created":1773323881,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"á!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323881-sbeSbTHCeTso0VvT2Trm","object":"chat.completion.chunk","created":1773323881,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323881-sbeSbTHCeTso0VvT2Trm","object":"chat.completion.chunk","created":1773323881,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":13,"completion_tokens":3,"total_tokens":16,"cost":0.00000452,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00000452,"upstream_inference_prompt_cost":0.00000338,"upstream_inference_completions_cost":0.00000114},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.671443459s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool.yaml deleted file mode 100644 index aab11aa1f..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 489 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323883-qj9Z9EU0tpfsgrYQKXNC\",\"object\":\"chat.completion\",\"created\":1773323884,\"model\":\"deepseek/deepseek-v3.2-20251201\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll get the weather information for Florence, Italy for you.\\n\\n\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"349178e55f3844ab9d1caa689619277a\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence,Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":318,\"completion_tokens\":58,\"total_tokens\":376,\"cost\":0.00010472,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00010472,\"upstream_inference_prompt_cost\":0.00008268,\"upstream_inference_completions_cost\":0.00002204},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.656624334s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 825 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll get the weather information for Florence, Italy for you.\n\n","tool_calls":[{"id":"349178e55f3844ab9d1caa689619277a","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"349178e55f3844ab9d1caa689619277a","role":"tool"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323887-OoxGQKe5NN2dKyD4fppO\",\"object\":\"chat.completion\",\"created\":1773323887,\"model\":\"deepseek/deepseek-v3.2-20251201\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy is **40°C** (which is 104°F). That's quite hot! If you're planning to be there, make sure to stay hydrated and seek shade during the hottest parts of the day.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":395,\"completion_tokens\":51,\"total_tokens\":446,\"cost\":0.00012208,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00012208,\"upstream_inference_prompt_cost\":0.0001027,\"upstream_inference_completions_cost\":0.00001938},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.471653125s diff --git a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool_streaming.yaml deleted file mode 100644 index c98c50266..000000000 --- a/providertests/testdata/TestOpenRouterCommon/deepseek/deepseek-v3.2/tool_streaming.yaml +++ /dev/null @@ -1,107 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 543 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"'ll get","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" the weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" information for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Florence,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Italy for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" you.\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"0a373b5ec8014719aec1898f092698c4","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\": \"Florence\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323890-5hlASQg7HIbNczB2sxfw","object":"chat.completion.chunk","created":1773323890,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":318,"completion_tokens":56,"total_tokens":374,"cost":0.00010396,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00010396,"upstream_inference_prompt_cost":0.00008268,"upstream_inference_completions_cost":0.00002128},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.497798917s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 873 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll get the weather information for Florence, Italy for you.\n\n","tool_calls":[{"id":"0a373b5ec8014719aec1898f092698c4","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"0a373b5ec8014719aec1898f092698c4","role":"tool"}],"model":"deepseek/deepseek-v3.2","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" temperature in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Florence,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" Italy is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"40°","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323894-rewl0HpIp9isI6kKd8cP","object":"chat.completion.chunk","created":1773323894,"model":"deepseek/deepseek-v3.2-20251201","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":393,"completion_tokens":13,"total_tokens":406,"cost":0.00010712,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00010712,"upstream_inference_prompt_cost":0.00010218,"upstream_inference_completions_cost":0.00000494},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.430157167s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool.yaml deleted file mode 100644 index 0c12e7ff7..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 853 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323563-vMWuE4lAdXXxYhoFBGsq\",\"object\":\"chat.completion\",\"created\":1773323563,\"model\":\"google/gemini-2.5-flash\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_add_U8tpxxwjMfCfJFWUR70h\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"b\\\":3,\\\"a\\\":2}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"tool_multiply_YmffBFRJLXoCJxBdhkmH\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}]}}],\"usage\":{\"prompt_tokens\":61,\"completion_tokens\":10,\"total_tokens\":71,\"cost\":0.0000433,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000433,\"upstream_inference_prompt_cost\":0.0000183,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.678430958s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1288 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_U8tpxxwjMfCfJFWUR70h","function":{"arguments":"{\"b\":3,\"a\":2}","name":"add"},"type":"function"},{"id":"tool_multiply_YmffBFRJLXoCJxBdhkmH","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"tool_add_U8tpxxwjMfCfJFWUR70h","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_YmffBFRJLXoCJxBdhkmH","role":"tool"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323565-qTc7olbcOYAvfIbW83iw\",\"object\":\"chat.completion\",\"created\":1773323565,\"model\":\"google/gemini-2.5-flash\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"I have added 2 and 3 to get 5, and multiplied 2 and 3 to get 6.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":110,\"completion_tokens\":25,\"total_tokens\":135,\"cost\":0.0000955,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000955,\"upstream_inference_prompt_cost\":0.000033,\"upstream_inference_completions_cost\":0.0000625},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.042498792s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool_streaming.yaml deleted file mode 100644 index 933628e71..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/multi_tool_streaming.yaml +++ /dev/null @@ -1,87 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 890 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_add_KQuyjhzkSrDLHHP8RcOV","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"b\":3,\"a\":2}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"tool_multiply_bdU7KY7e0zIp9S5WXO8k","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"b\":3,\"a\":2}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323568-46sn6OjhgDHVFJLSGDFI","object":"chat.completion.chunk","created":1773323568,"model":"google/gemini-2.5-flash","provider":"Google","choices":[],"usage":{"prompt_tokens":57,"completion_tokens":10,"total_tokens":67,"cost":0.0000421,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000421,"upstream_inference_prompt_cost":0.0000171,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 3.172039875s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1325 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_KQuyjhzkSrDLHHP8RcOV","function":{"arguments":"{\"b\":3,\"a\":2}","name":"add"},"type":"function"},{"id":"tool_multiply_bdU7KY7e0zIp9S5WXO8k","function":{"arguments":"{\"b\":3,\"a\":2}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"tool_add_KQuyjhzkSrDLHHP8RcOV","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_bdU7KY7e0zIp9S5WXO8k","role":"tool"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323571-WfkXfBTnlPHhaiUMJm5S","object":"chat.completion.chunk","created":1773323571,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"The sum of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323571-WfkXfBTnlPHhaiUMJm5S","object":"chat.completion.chunk","created":1773323571,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":" 2 and 3 is 5.\nThe product of 2 and 3 is 6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323571-WfkXfBTnlPHhaiUMJm5S","object":"chat.completion.chunk","created":1773323571,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323571-WfkXfBTnlPHhaiUMJm5S","object":"chat.completion.chunk","created":1773323571,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323571-WfkXfBTnlPHhaiUMJm5S","object":"chat.completion.chunk","created":1773323571,"model":"google/gemini-2.5-flash","provider":"Google","choices":[],"usage":{"prompt_tokens":106,"completion_tokens":25,"total_tokens":131,"cost":0.0000943,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000943,"upstream_inference_prompt_cost":0.0000318,"upstream_inference_completions_cost":0.0000625},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.648272667s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple.yaml deleted file mode 100644 index 7c6ee863d..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 198 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323546-Lz9h2412HbWSXFNgDi4q\",\"object\":\"chat.completion\",\"created\":1773323546,\"model\":\"google/gemini-2.5-flash\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":9,\"completion_tokens\":2,\"total_tokens\":11,\"cost\":0.0000077,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000077,\"upstream_inference_prompt_cost\":0.0000027,\"upstream_inference_completions_cost\":0.000005},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.217108958s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple_streaming.yaml deleted file mode 100644 index 886e0594d..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/simple_streaming.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 252 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323549-Z7TPTY3OFTwi3FbsrkD7","object":"chat.completion.chunk","created":1773323549,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"Olá","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323549-Z7TPTY3OFTwi3FbsrkD7","object":"chat.completion.chunk","created":1773323549,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323549-Z7TPTY3OFTwi3FbsrkD7","object":"chat.completion.chunk","created":1773323549,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323549-Z7TPTY3OFTwi3FbsrkD7","object":"chat.completion.chunk","created":1773323549,"model":"google/gemini-2.5-flash","provider":"Google","choices":[],"usage":{"prompt_tokens":9,"completion_tokens":2,"total_tokens":11,"cost":0.0000077,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000077,"upstream_inference_prompt_cost":0.0000027,"upstream_inference_completions_cost":0.000005},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.50132825s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool.yaml deleted file mode 100644 index ef4b36c82..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 490 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323551-Z9fvSRyarJhiEckomsGU\",\"object\":\"chat.completion\",\"created\":1773323551,\"model\":\"google/gemini-2.5-flash\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_FPNgk4I4KZEjUevmNdlw\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence,Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":28,\"completion_tokens\":5,\"total_tokens\":33,\"cost\":0.0000209,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000209,\"upstream_inference_prompt_cost\":0.0000084,\"upstream_inference_completions_cost\":0.0000125},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.649886792s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 749 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_FPNgk4I4KZEjUevmNdlw","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"tool_weather_FPNgk4I4KZEjUevmNdlw","role":"tool"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323554-NStMJTYcdirUtUc0NcNX\",\"object\":\"chat.completion\",\"created\":1773323554,\"model\":\"google/gemini-2.5-flash\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is 40 degrees Celsius.\\n\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":14,\"total_tokens\":70,\"cost\":0.0000518,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000518,\"upstream_inference_prompt_cost\":0.0000168,\"upstream_inference_completions_cost\":0.000035},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.892622666s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool_streaming.yaml deleted file mode 100644 index a746d18b2..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-2.5-flash/tool_streaming.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 544 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323557-bwTLEOraICpagWL6Uq07","object":"chat.completion.chunk","created":1773323557,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_13exAs9OnUCNuJ59R1nr","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323557-bwTLEOraICpagWL6Uq07","object":"chat.completion.chunk","created":1773323557,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323557-bwTLEOraICpagWL6Uq07","object":"chat.completion.chunk","created":1773323557,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323557-bwTLEOraICpagWL6Uq07","object":"chat.completion.chunk","created":1773323557,"model":"google/gemini-2.5-flash","provider":"Google","choices":[],"usage":{"prompt_tokens":28,"completion_tokens":5,"total_tokens":33,"cost":0.0000209,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000209,"upstream_inference_prompt_cost":0.0000084,"upstream_inference_completions_cost":0.0000125},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.693357792s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 803 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_13exAs9OnUCNuJ59R1nr","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"tool_weather_13exAs9OnUCNuJ59R1nr","role":"tool"}],"model":"google/gemini-2.5-flash","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323560-bWQYXK8x3ujdxDOjLrPN","object":"chat.completion.chunk","created":1773323560,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"The weather in Florence,Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323560-bWQYXK8x3ujdxDOjLrPN","object":"chat.completion.chunk","created":1773323560,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":" is 40 C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323560-bWQYXK8x3ujdxDOjLrPN","object":"chat.completion.chunk","created":1773323560,"model":"google/gemini-2.5-flash","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323560-bWQYXK8x3ujdxDOjLrPN","object":"chat.completion.chunk","created":1773323560,"model":"google/gemini-2.5-flash","provider":"Google","choices":[],"usage":{"prompt_tokens":56,"completion_tokens":12,"total_tokens":68,"cost":0.0000468,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000468,"upstream_inference_prompt_cost":0.0000168,"upstream_inference_completions_cost":0.00003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.10521125s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool.yaml deleted file mode 100644 index dc5bbd55d..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 857 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324005-wJjeeAWkEZDz7VOVeFl8\",\"object\":\"chat.completion\",\"created\":1773324005,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Contemplating Operations**\\n\\nI've decided to simultaneously invoke both the addition and multiplication tools. The inputs are clear: 2 and 3. I will make the calls and receive the combined results, as per instructions. It feels like a simple enough task.\\n\\n\\n**Constructing the Calls**\\n\\nI'm now formulating the tool calls. The `add` and `multiply` tools will both receive the same inputs: a = 2, and b = 3. I'm building out the calls as requested, ensuring they are correctly formatted. I will then send these tool calls in the output.\\n\\n\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_add_BBg7ltfK2mevaHnlNtro\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"tool_multiply_7JvrECM0fnB3wiILotc7\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"**Contemplating Operations**\\n\\nI've decided to simultaneously invoke both the addition and multiplication tools. The inputs are clear: 2 and 3. I will make the calls and receive the combined results, as per instructions. It feels like a simple enough task.\\n\\n\\n**Constructing the Calls**\\n\\nI'm now formulating the tool calls. The `add` and `multiply` tools will both receive the same inputs: a = 2, and b = 3. I'm building out the calls as requested, ensuring they are correctly formatted. I will then send these tool calls in the output.\\n\\n\\n\",\"format\":\"google-gemini-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"CiQBjz1rX4IdDk5hysBuPZydzU9+FNiryaovcmLVVkxqUahnO74KfwGPPWtfXwVIw6C/CsPqzV23ebxt1fLEk93J7ZuhI847mu84BDHQFZT5NqzQPTa8WFPbhzwGHsHiMJeRamvNyn6xN6VR94IvNaHs0NnCfg4vz2V4mVb1eNxDh7hKumA3jV0isZ/YgRr4hMrc9vscet8+A6L+vzbtjwilPg8zoXIKawGPPWtfmXfm2UvYgVN2ZSVdPubrbe2YBfVYI6e9aN3dSQ5W4NeV7tYxAAIR6l8KLm8hxICqF6fA66mRxHJBIisoeHqXycOJYlLBm7XEkY/m9oo+EOLjR4AxxfD80KSuSqd6JOvpqChndP7sCpcBAY89a18uzrdg3iTmpCsk/Mhlz/iLPY/6KJoyvsVYQ4gh5EAAuCglfiTgXdVl5CbwqimrvXP1brREeT11AjrTbBSUzzKb7vjx1oY7RvCzFQMw878Yk9SptJGdKmWzq+wHlTZ0D0ycf04e3CeAKno7U27pS5uRP6Z44LJ5fs6kGRDrLC5YH+sNZUgl4G4Qwgk/ZStjda9tXwqAAQGPPWtfFNHbpW51+brZJsLPFpO7ym2it/iq9f96sL5fA8ueJ+euPKqgvGLXPEDHeoFlf+j75lMTmUrbW/FEIGQ44MePKdF3rVP6TZaza1S+C1b7oRaG0aGAdwWEMIF1tLdoAaKdiPoi3y9GOJ140439tVDA1XjzoYfzZTLvrJWRCo4BAY89a1/LnFd4P0V06ucbrurakTj/3tOMtYRVApFhVwZN/kmJcxdhTjojzbFBUb1daWYw3LsJPZWyCVAgAhFfqhU0NvruK+gvkTUA/PCXIbA8tbbV+nNDqI+XLGrczRYlmmAuBFkeFSzeNys5BNnijN1AzLnMIxOY4TcOrmVtioVJbFJSiWkSDzeYjQN0hApSAY89a19QnvCiRryqXsOjH1V5IaINiFfa02fufqFJGjuvTCGbvBlsFB7bT9cABzArI6vXgMFzdb3JzjLL7kznff8BCFCEu3Ine0xijA+pgzXaSA==\",\"format\":\"google-gemini-v1\",\"id\":\"tool_add_BBg7ltfK2mevaHnlNtro\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":61,\"completion_tokens\":180,\"total_tokens\":241,\"cost\":0.002282,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002282,\"upstream_inference_prompt_cost\":0.000122,\"upstream_inference_completions_cost\":0.00216},\"completion_tokens_details\":{\"reasoning_tokens\":162,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 5.441428625s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2486 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_BBg7ltfK2mevaHnlNtro","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_7JvrECM0fnB3wiILotc7","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"CiQBjz1rX4IdDk5hysBuPZydzU9+FNiryaovcmLVVkxqUahnO74KfwGPPWtfXwVIw6C/CsPqzV23ebxt1fLEk93J7ZuhI847mu84BDHQFZT5NqzQPTa8WFPbhzwGHsHiMJeRamvNyn6xN6VR94IvNaHs0NnCfg4vz2V4mVb1eNxDh7hKumA3jV0isZ/YgRr4hMrc9vscet8+A6L+vzbtjwilPg8zoXIKawGPPWtfmXfm2UvYgVN2ZSVdPubrbe2YBfVYI6e9aN3dSQ5W4NeV7tYxAAIR6l8KLm8hxICqF6fA66mRxHJBIisoeHqXycOJYlLBm7XEkY/m9oo+EOLjR4AxxfD80KSuSqd6JOvpqChndP7sCpcBAY89a18uzrdg3iTmpCsk/Mhlz/iLPY/6KJoyvsVYQ4gh5EAAuCglfiTgXdVl5CbwqimrvXP1brREeT11AjrTbBSUzzKb7vjx1oY7RvCzFQMw878Yk9SptJGdKmWzq+wHlTZ0D0ycf04e3CeAKno7U27pS5uRP6Z44LJ5fs6kGRDrLC5YH+sNZUgl4G4Qwgk/ZStjda9tXwqAAQGPPWtfFNHbpW51+brZJsLPFpO7ym2it/iq9f96sL5fA8ueJ+euPKqgvGLXPEDHeoFlf+j75lMTmUrbW/FEIGQ44MePKdF3rVP6TZaza1S+C1b7oRaG0aGAdwWEMIF1tLdoAaKdiPoi3y9GOJ140439tVDA1XjzoYfzZTLvrJWRCo4BAY89a1/LnFd4P0V06ucbrurakTj/3tOMtYRVApFhVwZN/kmJcxdhTjojzbFBUb1daWYw3LsJPZWyCVAgAhFfqhU0NvruK+gvkTUA/PCXIbA8tbbV+nNDqI+XLGrczRYlmmAuBFkeFSzeNys5BNnijN1AzLnMIxOY4TcOrmVtioVJbFJSiWkSDzeYjQN0hApSAY89a19QnvCiRryqXsOjH1V5IaINiFfa02fufqFJGjuvTCGbvBlsFB7bT9cABzArI6vXgMFzdb3JzjLL7kznff8BCFCEu3Ine0xijA+pgzXaSA==","format":"google-gemini-v1","id":"tool_add_BBg7ltfK2mevaHnlNtro","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_BBg7ltfK2mevaHnlNtro","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_7JvrECM0fnB3wiILotc7","role":"tool"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324011-3Y83R1WkjwD2fLe7EZKf\",\"object\":\"chat.completion\",\"created\":1773324011,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5, and the product of 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":109,\"completion_tokens\":25,\"total_tokens\":134,\"cost\":0.000518,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000518,\"upstream_inference_prompt_cost\":0.000218,\"upstream_inference_completions_cost\":0.0003},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 4.693649875s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool_streaming.yaml deleted file mode 100644 index d26c88e88..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/multi_tool_streaming.yaml +++ /dev/null @@ -1,93 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 894 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Initiating Operations Concurrently**\n\nI've got the directive to execute both 'add' and 'multiply' operations on the provided numbers, 2 and 3. The system prompt is clear: both must be used. Now I am formulating the concurrent calls to 'add' and 'multiply', as requested.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Initiating Operations Concurrently**\n\nI've got the directive to execute both 'add' and 'multiply' operations on the provided numbers, 2 and 3. The system prompt is clear: both must be used. Now I am formulating the concurrent calls to 'add' and 'multiply', as requested.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Constructing Tool Calls**\n\nI'm solidifying the implementation strategy. My current focus is generating a list containing the `add` and `multiply` function calls, both operating on the inputs 2 and 3, as I previously planned. That list is now ready for execution.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Constructing Tool Calls**\n\nI'm solidifying the implementation strategy. My current focus is generating a list containing the `add` and `multiply` function calls, both operating on the inputs 2 and 3, as I previously planned. That list is now ready for execution.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"CiQBjz1rX8jwTvOiEkSdffMAbbZb3AAf8J6TRL+sv+cWElPrf1UKZwGPPWtfWNRRPkLCDBabDP5oo0WMzTrSFtbdqfv71+er3owJmWicmo4eIEWcKo18eDA4FrV4UvfwEU/bTdRZik97eIfZTzKLFj2pZMnFdF6mr/9R1YQ6QDK01Gab7ojW4nrSn6O+mLkKZAGPPWtfGne8v/7fOrodXKtnOK8O/KmqnZwQMoUNkP/Nxsy7f4vcegXjk421zmJ/9dNiCd2W/9AXGZkgCLYZoZESC9056TnLcfiwRMOH+JxTpOK9pbWcDPx5s8QJkVWUT+2Aq8sKrgEBjz1rX0DeTAqlLohJ1Nh4BFPPhmEtrrLKP39s++nYc+0k2CWDmI8XcvPsfXuIKGQFIG60fUn0CANPDjWtnWOI7CkwAe/iuzO0oul1sr8yebW0ucuN9JtPzhCKFLgCoydZ+YmiEqeA2m/+0UWfX687eNUODu2Zb4snWbZcx+vF0mS2rhzKpSktfgFJtc7z/A+/uPrsSCN8fIx0zH0bJuc2tMU03zr5XsBo5MtrO+AKYgGPPWtfx94NLyXU91eymKkmuKLgGkZ/tBK366wzvwLkopNlbJcoYDXBvZKE9ixmX+jyjP46RzftAmBusOOG8Z4TrGzUXld7fN+eAb5QIEKP7BegRq4KCco9wYqehjEuq+ZwCkIBjz1rX4NMJ6Fb+Vytwp7qSprS8/sBuNyrUT3ryumRgPlYFVhOTo6QEdjavg2ik1QvCHSX+PvIZHBqKoLAJ88znEg=","format":"google-gemini-v1","id":"tool_add_pBo1amaXosQZHph2sTIn","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_add_pBo1amaXosQZHph2sTIn","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"tool_multiply_4OlsV1nHAV6rIa96boyX","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"b\":3,\"a\":2}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773324016-ju6o6zsDAama1Oyl2svH","object":"chat.completion.chunk","created":1773324016,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":57,"completion_tokens":121,"total_tokens":178,"cost":0.001566,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001566,"upstream_inference_prompt_cost":0.000114,"upstream_inference_completions_cost":0.001452},"completion_tokens_details":{"reasoning_tokens":103,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 5.262496708s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2881 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_pBo1amaXosQZHph2sTIn","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_4OlsV1nHAV6rIa96boyX","function":{"arguments":"{\"b\":3,\"a\":2}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"google-gemini-v1","index":0,"text":"**Initiating Operations Concurrently**\n\nI''ve got the directive to execute both ''add'' and ''multiply'' operations on the provided numbers, 2 and 3. The system prompt is clear: both must be used. Now I am formulating the concurrent calls to ''add'' and ''multiply'', as requested.\n\n\n**Constructing Tool Calls**\n\nI''m solidifying the implementation strategy. My current focus is generating a list containing the `add` and `multiply` function calls, both operating on the inputs 2 and 3, as I previously planned. That list is now ready for execution.\n\n\n","type":"reasoning.text"},{"data":"CiQBjz1rX8jwTvOiEkSdffMAbbZb3AAf8J6TRL+sv+cWElPrf1UKZwGPPWtfWNRRPkLCDBabDP5oo0WMzTrSFtbdqfv71+er3owJmWicmo4eIEWcKo18eDA4FrV4UvfwEU/bTdRZik97eIfZTzKLFj2pZMnFdF6mr/9R1YQ6QDK01Gab7ojW4nrSn6O+mLkKZAGPPWtfGne8v/7fOrodXKtnOK8O/KmqnZwQMoUNkP/Nxsy7f4vcegXjk421zmJ/9dNiCd2W/9AXGZkgCLYZoZESC9056TnLcfiwRMOH+JxTpOK9pbWcDPx5s8QJkVWUT+2Aq8sKrgEBjz1rX0DeTAqlLohJ1Nh4BFPPhmEtrrLKP39s++nYc+0k2CWDmI8XcvPsfXuIKGQFIG60fUn0CANPDjWtnWOI7CkwAe/iuzO0oul1sr8yebW0ucuN9JtPzhCKFLgCoydZ+YmiEqeA2m/+0UWfX687eNUODu2Zb4snWbZcx+vF0mS2rhzKpSktfgFJtc7z/A+/uPrsSCN8fIx0zH0bJuc2tMU03zr5XsBo5MtrO+AKYgGPPWtfx94NLyXU91eymKkmuKLgGkZ/tBK366wzvwLkopNlbJcoYDXBvZKE9ixmX+jyjP46RzftAmBusOOG8Z4TrGzUXld7fN+eAb5QIEKP7BegRq4KCco9wYqehjEuq+ZwCkIBjz1rX4NMJ6Fb+Vytwp7qSprS8/sBuNyrUT3ryumRgPlYFVhOTo6QEdjavg2ik1QvCHSX+PvIZHBqKoLAJ88znEg=","format":"google-gemini-v1","id":"tool_add_pBo1amaXosQZHph2sTIn","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_pBo1amaXosQZHph2sTIn","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_4OlsV1nHAV6rIa96boyX","role":"tool"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324023-7FoX7Fe6AT4zEtGIZMt7","object":"chat.completion.chunk","created":1773324023,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"The result","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324023-7FoX7Fe6AT4zEtGIZMt7","object":"chat.completion.chunk","created":1773324023,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":" of adding 2 and 3 is 5, and the result of multiplying ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324023-7FoX7Fe6AT4zEtGIZMt7","object":"chat.completion.chunk","created":1773324023,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"2 by 3 is 6.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324023-7FoX7Fe6AT4zEtGIZMt7","object":"chat.completion.chunk","created":1773324023,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773324023-7FoX7Fe6AT4zEtGIZMt7","object":"chat.completion.chunk","created":1773324023,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":106,"completion_tokens":27,"total_tokens":133,"cost":0.000536,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000536,"upstream_inference_prompt_cost":0.000212,"upstream_inference_completions_cost":0.000324},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 4.543200542s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple.yaml deleted file mode 100644 index 8ac2b9f78..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 202 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323945-KH4iNGLeuzlTvaLsyi6w\",\"object\":\"chat.completion\",\"created\":1773323945,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"You can say **\\\"Oi\\\"** (informal) or **\\\"Olá\\\"** (slightly more formal, like \\\"Hello\\\").\",\"refusal\":null,\"reasoning\":\"**Investigating Portuguese Greetings**\\n\\nI've homed in on the translation. It looks like \\\"Oi\\\" or \\\"Olá\\\" are the go-to options for \\\"hi\\\" in Portuguese. I'm noting \\\"Oi\\\" seems more casual than \\\"Olá,\\\" which is a key distinction to remember. Now, I'm considering contexts where one might be preferred over the other.\\n\\n\\n**Pinpointing Formalities in Usage**\\n\\nI'm now focusing on the formality aspects. I've noted that while \\\"Oi\\\" is indeed the simplest, providing \\\"Olá\\\" broadens the scope and adds nuance. Considering Brazilian versus European Portuguese, \\\"Oi\\\" is universally understood, and \\\"Olá\\\" is a safe bet in any setting. Time to refine the response to highlight this key distinction.\\n\\n\\n\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"**Investigating Portuguese Greetings**\\n\\nI've homed in on the translation. It looks like \\\"Oi\\\" or \\\"Olá\\\" are the go-to options for \\\"hi\\\" in Portuguese. I'm noting \\\"Oi\\\" seems more casual than \\\"Olá,\\\" which is a key distinction to remember. Now, I'm considering contexts where one might be preferred over the other.\\n\\n\\n**Pinpointing Formalities in Usage**\\n\\nI'm now focusing on the formality aspects. I've noted that while \\\"Oi\\\" is indeed the simplest, providing \\\"Olá\\\" broadens the scope and adds nuance. Considering Brazilian versus European Portuguese, \\\"Oi\\\" is universally understood, and \\\"Olá\\\" is a safe bet in any setting. Time to refine the response to highlight this key distinction.\\n\\n\\n\",\"format\":\"google-gemini-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"CikBjz1rXwsGfPyvpPTAObMA8wPY8uxtdh1qGpqVEC05KQjr6RE0517NrgpfAY89a1/C4BHmlOUe84daSc91J8qgaLcbiV66XMyz9B5X5ZzuSefPJFWink0sAEUhGKPhOd/UFJPd5vJn77FcANSfBJAPbXvQfPt1ur7ds7EKCdw1Uf2dEEYeFmTclhIKVAGPPWtfbVH+bCLa8my52HmrpFDVzvcO7b/PcesVlwo3SBlS7Eli0ZNEm7OND/wqwQhTPb3jSh/R2rtDuwdFVwh5oO0xhhQEFHHWE04G0q6lu7SKNgqKAQGPPWtfataiI310cD2pGmQZCqBsfRUiaaNglWcxoNrB4Y9D4VAEn0ij3q/FqKstF4qhqoBrIifdao3j9uezXb+orq27fi0z1wGg6PdtnOWPffTvSf0P+QgqjuXBct72DfnSigToi1Q3Tkl8f1/jN+yIzxoXG5aYb9tF+hpXpURZ8IPC7wI6ePkhfQqTAQGPPWtfiI8zBsiNninyAu6SpnEYl4ud3WcyIXD4EAMozlPb5L2gcWL4wMt3iydbR61Na07ptsL6ZhMAA2Epq96Nl/UURN+1TJQwJdjlXjKwYVTUnTuLwYABmkGLqBYU7KRgQ/1I/29y0X8A2siLzuQgLENUJ/dyrP45OFR3BKq1uqJ7K5pHtzx6z1RZtk7jy0QUbQr8AQGPPWtfloLRZXdGzWKCLT9hSa6ExEAr8HQo0Kv1wIYVA8D90I0BsHNBx1lj+a5IaU7YzzIxtAzRXE+JOwWvc+DRwBmHv/bauCVFlCaOuJp19a+KbfDijnGk2LXQF9WdnoskIXJA9b4EkW3TjloWpnD3rOC4mpDaWkKeux1rCZRy8Tgf2mW0sBaLBMklT/ND7M5VtrS8Smwkdk6RnW8NEBnbpBFuXNvjJyRb4UXgMegCXr10Hsd7ybib5oUniqRYRDTIetEHoEmkaRASouiq7zNUhtCrE+6jp3mInFEVVgpaeag1f2wWznjepOP49T70qNLFFdYDbTJIUmah/ArqAQGPPWtfM7rLtwJchAXUP/pquoVVVFxSRVXFAI/TYqHToe6D3seuE4r+4Uxxqj8Lor9ywF+mMmr4OnOHvWsJHgqBBdYOy9lHs+wMz/aWWoj1SUqbVAF0Bev4HkJRl8kDIVgfybmeFMb62puDxI1XIZCMgNYjgsVsvK/Srhg2rYvT8+eC6M8wCglEhga9KKgC5MvlHbwlLmccLSw78z0LIClZ87tsHGMLoLHt1QwHz92f0jj44evxCPyJaXhmQjQfKLiXhGkodiYAgLOvbM1NEqCnCJ0SPnJshzM++2VivCM/MA4MBn3ncHbyrgqeAgGPPWtfJbGNaMohwobhRZaiP9s7/0cPvfbwEr+uc8cdcsqigM8NLh7E1svZmXYmoJ97+TPjamGc+guxjbKJ5gs5IwG/nfCaP2j1CtXEnNY1MErs6FByHZypuLrSoLsldBSHOM6jYD+g2FJcsAvh9qBvfQpN3KVWOGh3oKCfITK4HsjVvpo1+CNJnsG0eLS38NsZqNr++RPCqkYvDGNrTjZpkj+5aK8+tRbvlUGet3z+2Fjq3p2EbrGTNltfJwQv72+LxJGlEkY4XbYQ1bpCrfTxpTokeAPfn4h5Gjp9WOyZFCeHaMWrzkCOGnVszILUWAmjnckNouleUKXVuDeQHEHdQKuFKaSQIwxLBGozhEbhhNGcgsN8HdTCGttsAaoKLAGPPWtfSyuI+pFjWeM4AomPtbYxXeuhNy3rReUxjnCWHfTqQjFeKqiduFa+\",\"format\":\"google-gemini-v1\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":9,\"completion_tokens\":293,\"total_tokens\":302,\"cost\":0.003534,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.003534,\"upstream_inference_prompt_cost\":0.000018,\"upstream_inference_completions_cost\":0.003516},\"completion_tokens_details\":{\"reasoning_tokens\":266,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 5.605099625s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple_streaming.yaml deleted file mode 100644 index 1e8d68304..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/simple_streaming.yaml +++ /dev/null @@ -1,46 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 256 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Discovering Greetings in Portuguese**\n\nI've homed in on the core of the user's request: translating \"hi\" to Portuguese. So far, the process is straightforward; I've parsed the prompt, confirming that the user is seeking a Portuguese greeting. Now I'm meticulously generating a list of possible translations. *Oi* is definitely the most prevalent, and the informal tone is noted. What else is there?\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Discovering Greetings in Portuguese**\n\nI've homed in on the core of the user's request: translating \"hi\" to Portuguese. So far, the process is straightforward; I've parsed the prompt, confirming that the user is seeking a Portuguese greeting. Now I'm meticulously generating a list of possible translations. *Oi* is definitely the most prevalent, and the informal tone is noted. What else is there?\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Considering Cultural Context in Translations**\n\nI'm now integrating the cultural dimensions of the prompt. I've mapped the primary translations (*Oi* and *Olá*), and the next step is layering in considerations of formality and regional variances. I'm focusing on providing context; for instance, is there an advantage to using one greeting over another in a specific circumstance? The goal is to convey not just the words, but the nuances of how they're used.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Considering Cultural Context in Translations**\n\nI'm now integrating the cultural dimensions of the prompt. I've mapped the primary translations (*Oi* and *Olá*), and the next step is layering in considerations of formality and regional variances. I'm focusing on providing context; for instance, is there an advantage to using one greeting over another in a specific circumstance? The goal is to convey not just the words, but the nuances of how they're used.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"You can say **\"Oi\"** (informal) or **\"Olá\"** (slightly more formal, but suitable for almost any situation).","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"CikBjz1rXzWbLe+Kp5V9HEz6zONyB+8lsCyQ3JFwB6LAFferupDkixSwZwpfAY89a18NaFyuCwQI5J1JbcCbdb1mCIKlD6SqZ80wKXXlkPO5v2Ri3T9EuhV4sXjEm2wU4yrwfl+8m2yXhX8QGmzR8h5ehp20DDGaAaAFkjJqDKJnufm4HXIYh1tE2kEKZgGPPWtfL/OUBSAweEOtJ1/PhwyHBnQUfjQH2/95OnoEAysBf+rgP52A10qbu1H0zvqzrS51YhVcHsNNVBJYZPvpbUWRKd8P+fUCfmMe9u/fCU5SCegCyLciL5cf8S079KtRBFhPgAqPAQGPPWtfvQFTkd1Zgi7cBYRJV68hE5AjtVRjBDLlc2rpJuKAzFoItsvQXDArzFJUfyq36wKv1J9o/ks4c4SNCZfmKTvu9hgYwZzeMXyXDKRVPY8ViGt0X0x74ADzf8qtntNYmhDhsn7AeyIUjMGBmaTDjwtxnVemEHxNtT4GCipJkkguD1sdVUpDexdhepqdCqEBAY89a19zuQ/BstuVpfucymYiYCwnvApm6YLEL3al/5vEkWrB/aFoqyDJi2EHWrBNZWWUPOlFA0mDrcDBW/vLueHEHO52U8bHWEGFV3Kna7yTalRX9Gy55D37fQrBDDzAFH7IATFAGFliXTLYcQGJbUaAUDO/Jtlo7Mgv9rFBo8+Qjs++h/4Ch7ytbjMSiB7Q/Vbr/0THl6z2QDwgA+GfeZsK0QEBjz1rX+yjloPA3E0pMfhcAqHG0mfI4y/O97ojOxbHLTrwz8cqpDe2uZ/+DPO5g5j1kozCtW2ZjnBiCcRmDNlsKfTKVI3EqRZHAGiAZCmZTlXnvCbdvIqYr45NuOTaGAtKJqbBnRgn697aqxV/VCGG7i8H0ph/eo0McK33TvhP9o/hg5QyeF6rzAIsPRXUknZHnoVAIQiYSLxCCX5tC8eL+Hz/rkF+pTbWt7JFAdyy/ok0JGgkYaTrUNaq7Ao6oVqcQN8tCey9R8ZyD2M0AUxrxwrcAQGPPWtf4ytHwYc+Je/mFwufvZ0I8qATM6FVGljWXqHA0tpJ/N1bx6DFeQLPAz8nOJPq1p6CZ/jBYRvZKGV/fqjs5NgRMTM+7ASCE61pQvpan+ZER9qa43Fv1LlORbzIUgg41BwzrP5KHyriLgdPfXKHV5f/zdLzfMmFDB7kwrvz5KtjJ5E5KaleDSY88x8xohyQyBeNb6c1AanPkTUR24EVGBFI6I4YS0gM9vRMAJvQidVM4JBEWx0k7uJ+L2ogzKmwz09tiraxDrfWwZi66da+MQ9p1jNsONUw5xMK7gEBjz1rXwph1CkfzOaBpycndaf+OXytzrGNftmYHe/MzLR6t2tnyJMalOF+AtNiG0hRG4Gy5IDWFNFC4KeTO+4bS4lreyLt5aebmO9dbMIpn3BNq62A+FgrL2by+GrMKmOActCg2ONwxseBJE5HsCPVejqCvbvEY/A+/3aImDp3Vi5QL0k2/JUoyFfsiidPVoM8dT9IfBXe5XilHQZQKG4AnvKvCQJvxhOmDV5WtHnQy0olUGQdZZVn8Da6JW+AvDY2tQfL6caPMMutp7l2cPjA/3kbATeLmUNsUQ8vW3ZH+gr8cw2nmRlzpmSZvXJmCmkBjz1rX1zS5oLLYHpfWJkmoPGQoTfKxoET2z3U9Aee3AmzPddYfU0iAOo1F3gvOSR0ztl4ph/ZbbSPLmGWHLsksjA72g4fFBk/6zsVP69SWbZKfqL3GdpYl4S+Ju1QVHUMp+95zCgTXCI=","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323953-YCRLdmUuB5yGRxQwfY8l","object":"chat.completion.chunk","created":1773323953,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":9,"completion_tokens":314,"total_tokens":323,"cost":0.003786,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.003786,"upstream_inference_prompt_cost":0.000018,"upstream_inference_completions_cost":0.003768},"completion_tokens_details":{"reasoning_tokens":284,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 6.089984333s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool.yaml deleted file mode 100644 index 02fe2bec3..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 494 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323962-Rw07UNMeWA60q0rNXDzM\",\"object\":\"chat.completion\",\"created\":1773323962,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Gathering Weather Data**\\n\\nI'm zeroing in on the best approach. My strategy is to employ the `weather` function to get the required weather details. Right now, I'm focused on extracting the location from the user's initial request. I'll need to feed the function \\\"Florence, Italy\\\" as the location.\\n\\n\\n**Defining The Function Call**\\n\\nI'm solidifying the implementation strategy. I plan to call the `weather` function now that I have the location. The next step will be formatting the function call with \\\"Florence, Italy\\\" properly input as the location.\\n\\n\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_LHAdTONWsMosyZwDGBmQ\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence,Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"**Gathering Weather Data**\\n\\nI'm zeroing in on the best approach. My strategy is to employ the `weather` function to get the required weather details. Right now, I'm focused on extracting the location from the user's initial request. I'll need to feed the function \\\"Florence, Italy\\\" as the location.\\n\\n\\n**Defining The Function Call**\\n\\nI'm solidifying the implementation strategy. I plan to call the `weather` function now that I have the location. The next step will be formatting the function call with \\\"Florence, Italy\\\" properly input as the location.\\n\\n\\n\",\"format\":\"google-gemini-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"ClkBjz1rXxzgSFPYazsgAbVkNsxRfxt6rILuGXWuM905srXA5IqQHKYshHvdIQ4clY1SQSX9x7Zfqi+EIopTLVedHvJm/vuMzH8rJ6IK5lsgV7CYi3/hLyME5gprAY89a190CczLBN2BdlP2DpRaail2ts4NRlnoh9Ea/uT1Zx3OjkGaX1KmKQXdmyAyx0JPv8vAm6mBG7LT8kdBCCH5og9/wUmucf1YkhGH0LnK+BfmeyAkTQlinpMq9FS4wbl+Um3USz7DUX0KswEBjz1rX/VQvRaXzGVlq9MkoDfX5Zbjw23OcCOrKQDhFQhq9tT/0c7IEPHs2wsjVLrWnYdltTSfvX0z9ML0miKyTqQSLBdPh2WKWWmpdY/vdQ12rkAglUeIvTdINZKkY4mdoMKzDgvIFc2mdEUN7qfnYu/DBeLXr+FM0jjfOvDaVQjf6zfgUX6HS6u/d42j0XkLePkt56coejNz+8vfzW4UikY/FL9/i5HDSaN/aCAUnMHuPgpEAY89a18zrha3ifUOUwGIrCWFiaLNLRckJfRfAD6zeqthAAhv1p2oBCVbRtiSplusfcfZDq25CZ8pPGfp8hHv1JZ1Zh8=\",\"format\":\"google-gemini-v1\",\"id\":\"tool_weather_LHAdTONWsMosyZwDGBmQ\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":28,\"completion_tokens\":82,\"total_tokens\":110,\"cost\":0.00104,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00104,\"upstream_inference_prompt_cost\":0.000056,\"upstream_inference_completions_cost\":0.000984},\"completion_tokens_details\":{\"reasoning_tokens\":73,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 6.332650917s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1499 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_LHAdTONWsMosyZwDGBmQ","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"ClkBjz1rXxzgSFPYazsgAbVkNsxRfxt6rILuGXWuM905srXA5IqQHKYshHvdIQ4clY1SQSX9x7Zfqi+EIopTLVedHvJm/vuMzH8rJ6IK5lsgV7CYi3/hLyME5gprAY89a190CczLBN2BdlP2DpRaail2ts4NRlnoh9Ea/uT1Zx3OjkGaX1KmKQXdmyAyx0JPv8vAm6mBG7LT8kdBCCH5og9/wUmucf1YkhGH0LnK+BfmeyAkTQlinpMq9FS4wbl+Um3USz7DUX0KswEBjz1rX/VQvRaXzGVlq9MkoDfX5Zbjw23OcCOrKQDhFQhq9tT/0c7IEPHs2wsjVLrWnYdltTSfvX0z9ML0miKyTqQSLBdPh2WKWWmpdY/vdQ12rkAglUeIvTdINZKkY4mdoMKzDgvIFc2mdEUN7qfnYu/DBeLXr+FM0jjfOvDaVQjf6zfgUX6HS6u/d42j0XkLePkt56coejNz+8vfzW4UikY/FL9/i5HDSaN/aCAUnMHuPgpEAY89a18zrha3ifUOUwGIrCWFiaLNLRckJfRfAD6zeqthAAhv1p2oBCVbRtiSplusfcfZDq25CZ8pPGfp8hHv1JZ1Zh8=","format":"google-gemini-v1","id":"tool_weather_LHAdTONWsMosyZwDGBmQ","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_LHAdTONWsMosyZwDGBmQ","role":"tool"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323968-FAAVX4K7Zias1hgmd27W\",\"object\":\"chat.completion\",\"created\":1773323968,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently 40°C.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":52,\"completion_tokens\":14,\"total_tokens\":66,\"cost\":0.000272,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000272,\"upstream_inference_prompt_cost\":0.000104,\"upstream_inference_completions_cost\":0.000168},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 4.414599542s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool_streaming.yaml deleted file mode 100644 index c361dd0fe..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gemini-3-pro-preview/tool_streaming.yaml +++ /dev/null @@ -1,85 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 548 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Analyzing the Request**\n\nI've homed in on the user's need: weather data for Florence, Italy. My primary action now is identifying a suitable function, which, based on its name, is `weather`. A key parameter, `location`, is also clear. I plan to use the `weather` function with \"Florence, Italy\" as the location.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Analyzing the Request**\n\nI've homed in on the user's need: weather data for Florence, Italy. My primary action now is identifying a suitable function, which, based on its name, is `weather`. A key parameter, `location`, is also clear. I plan to use the `weather` function with \"Florence, Italy\" as the location.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"CiQBjz1rXy/d6pcsxX2eeGAFJcWLwFKD8Fq7tzM4znpEy3uK6hkKcAGPPWtfdI2OUC5gBrFwuxgrbLbk84CqxKEqAPN0KZYOWFW3qoz1mSztFR+VVmJ4sdMXeAd0F5mAxvMcYzOGdgfmxAnygICxzhVEhnMiG2s+kCdESJ9gfqxZsDvVMS+HZq8hpfrjvwd7c/AYVxjdOYUKggEBjz1rXzlW5UTYY0QFoD2RsMgcdZ6TA3RCMoaED8q41ltANatdDbKN5OFS82APPTPbqvLl/3HrMh5zqIkZWzhLbDrR+jDznhGoWxgoobAk2HRV6cHyi35TMSvIziLWiGq2u9Etp1Uai2IVTDCmjiEsugdu156W4MXitiaGzPr8EhMpCooBAY89a1/mr6bY7W14FUhSese7Cw9/SlEuV2fcfx4xdINH6j7eP0PVqD295H01svPNvrIiFNY9/VA4/wR7StYvBt0GtTk3a7ScA+ZPydvE5E5QM0aUGvX6NGkAka1T55vwWFbnZKwy/vvxq9kZVUsWkIfvThQS1XIlZ5g9g/fOrQbo/Q0lqhka2MCc","format":"google-gemini-v1","id":"tool_weather_UjtAnUhPX2w8d0BXNCVK","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_UjtAnUhPX2w8d0BXNCVK","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323973-ijsbVGP7klYwXuHnZ7oB","object":"chat.completion.chunk","created":1773323973,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":28,"completion_tokens":73,"total_tokens":101,"cost":0.000932,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000932,"upstream_inference_prompt_cost":0.000056,"upstream_inference_completions_cost":0.000876},"completion_tokens_details":{"reasoning_tokens":64,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 10.279697125s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1915 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_UjtAnUhPX2w8d0BXNCVK","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"google-gemini-v1","index":0,"text":"**Analyzing the Request**\n\nI''ve homed in on the user''s need: weather data for Florence, Italy. My primary action now is identifying a suitable function, which, based on its name, is `weather`. A key parameter, `location`, is also clear. I plan to use the `weather` function with \"Florence, Italy\" as the location.\n\n\n","type":"reasoning.text"},{"data":"CiQBjz1rXy/d6pcsxX2eeGAFJcWLwFKD8Fq7tzM4znpEy3uK6hkKcAGPPWtfdI2OUC5gBrFwuxgrbLbk84CqxKEqAPN0KZYOWFW3qoz1mSztFR+VVmJ4sdMXeAd0F5mAxvMcYzOGdgfmxAnygICxzhVEhnMiG2s+kCdESJ9gfqxZsDvVMS+HZq8hpfrjvwd7c/AYVxjdOYUKggEBjz1rXzlW5UTYY0QFoD2RsMgcdZ6TA3RCMoaED8q41ltANatdDbKN5OFS82APPTPbqvLl/3HrMh5zqIkZWzhLbDrR+jDznhGoWxgoobAk2HRV6cHyi35TMSvIziLWiGq2u9Etp1Uai2IVTDCmjiEsugdu156W4MXitiaGzPr8EhMpCooBAY89a1/mr6bY7W14FUhSese7Cw9/SlEuV2fcfx4xdINH6j7eP0PVqD295H01svPNvrIiFNY9/VA4/wR7StYvBt0GtTk3a7ScA+ZPydvE5E5QM0aUGvX6NGkAka1T55vwWFbnZKwy/vvxq9kZVUsWkIfvThQS1XIlZ5g9g/fOrQbo/Q0lqhka2MCc","format":"google-gemini-v1","id":"tool_weather_UjtAnUhPX2w8d0BXNCVK","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_UjtAnUhPX2w8d0BXNCVK","role":"tool"}],"model":"google/gemini-3-pro-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323994-kEA21hVoQ2WnDw9kiW6h","object":"chat.completion.chunk","created":1773323994,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"The weather in Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323994-kEA21hVoQ2WnDw9kiW6h","object":"chat.completion.chunk","created":1773323994,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":", Italy is currently 40°C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323994-kEA21hVoQ2WnDw9kiW6h","object":"chat.completion.chunk","created":1773323994,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773323994-kEA21hVoQ2WnDw9kiW6h","object":"chat.completion.chunk","created":1773323994,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":54,"completion_tokens":14,"total_tokens":68,"cost":0.000276,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000276,"upstream_inference_prompt_cost":0.000108,"upstream_inference_completions_cost":0.000168},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 10.188124458s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml new file mode 100644 index 000000000..9c6e7a808 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 866 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945403-sdpFM7Ibw0ydMbFfbFhk\",\"object\":\"chat.completion\",\"created\":1773945403,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_add_67Z4MFOopECpNHW6qvVN\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"tool_multiply_ODGB2Wg7IAvQ59EC0lXF\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a19euJGckSKHF210qgCYi0Cogu3ONrdlkrEwpq++DXoXjQNMP5N52UMy4CKjXRE=\",\"format\":\"google-gemini-v1\",\"id\":\"tool_add_67Z4MFOopECpNHW6qvVN\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":87,\"completion_tokens\":32,\"total_tokens\":119,\"cost\":0.00006975,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00006975,\"upstream_inference_prompt_cost\":0.00002175,\"upstream_inference_completions_cost\":0.000048},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.110945792s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1507 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_67Z4MFOopECpNHW6qvVN","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_ODGB2Wg7IAvQ59EC0lXF","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a19euJGckSKHF210qgCYi0Cogu3ONrdlkrEwpq++DXoXjQNMP5N52UMy4CKjXRE=","format":"google-gemini-v1","id":"tool_add_67Z4MFOopECpNHW6qvVN","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_67Z4MFOopECpNHW6qvVN","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_ODGB2Wg7IAvQ59EC0lXF","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945406-hlTqhqmy3oevZu6kSqJM\",\"object\":\"chat.completion\",\"created\":1773945406,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5, and the product of 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a18UGmTcyJ8nYzEK+7YFBG7gkHttSMEFVtoN+qdCBx5uCVaHs0xHLqqpi7pJn/Q=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":154,\"completion_tokens\":25,\"total_tokens\":179,\"cost\":0.000076,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000076,\"upstream_inference_prompt_cost\":0.0000385,\"upstream_inference_completions_cost\":0.0000375},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.028248792s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml new file mode 100644 index 000000000..ccc94db82 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml @@ -0,0 +1,121 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 903 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a1+4ldhGjiNn8S1VuGpFQrS57EYj823FwVVWyxvAG0cE5Qi8Mh3qDl5zaYStVes=","format":"google-gemini-v1","id":"tool_add_sYdHLQ7pM4TsXu9boNT5","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_add_sYdHLQ7pM4TsXu9boNT5","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"b\":3,\"a\":2}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} + + data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":83,"completion_tokens":32,"total_tokens":115,"cost":0.00006875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00006875,"upstream_inference_prompt_cost":0.00002075,"upstream_inference_completions_cost":0.000048},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 3.101256s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1544 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_sYdHLQ7pM4TsXu9boNT5","function":{"arguments":"{\"b\":3,\"a\":2}","name":"add"},"type":"function"},{"id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a1+4ldhGjiNn8S1VuGpFQrS57EYj823FwVVWyxvAG0cE5Qi8Mh3qDl5zaYStVes=","format":"google-gemini-v1","id":"tool_add_sYdHLQ7pM4TsXu9boNT5","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_sYdHLQ7pM4TsXu9boNT5","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"The sum","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" of 2 and ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"3 is 5, and the product of 2 and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" 3 is 6.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a18Arm6uvbtwsskpVED8BnueFZjjOLD5zxfz/ALu6B8EI7sgVUR6svb/kSSFRmM=","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + + data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":150,"completion_tokens":25,"total_tokens":175,"cost":0.000075,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000075,"upstream_inference_prompt_cost":0.0000375,"upstream_inference_completions_cost":0.0000375},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 3.220695416s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml new file mode 100644 index 000000000..6688a02ed --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 211 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945384-xZPhbwajwzm3GL9jqUHp\",\"object\":\"chat.completion\",\"created\":1773945384,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a1/3xY1TdwDH5U/lq5Eban8Wxxd1lYhLpbwogJiu9r0BguV+vY5JOgnVjONbeJE=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":9,\"completion_tokens\":2,\"total_tokens\":11,\"cost\":0.00000525,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00000525,\"upstream_inference_prompt_cost\":0.00000225,\"upstream_inference_completions_cost\":0.000003},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.984944208s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml new file mode 100644 index 000000000..0194693c3 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml @@ -0,0 +1,46 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 265 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"Olá!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgG+Pvb72piB9g0HqzVyYjGL9Be9fvg3tyhef4/NDaxTjBDkMJi5K7zGEDVk+5oNajHu","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + + data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13,"cost":0.00000575,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00000575,"upstream_inference_prompt_cost":0.00000275,"upstream_inference_completions_cost":0.000003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.240184834s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml new file mode 100644 index 000000000..f1f6915ff --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 503 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945390-pdnIFKfKJyD9oVzWL9Dr\",\"object\":\"chat.completion\",\"created\":1773945390,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_aaDFcPO0qsPIvlIQKSFc\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a19LCy6WJJsnCldFSEDCKuOZfohIqqdmMNnccTB8AkfBDwEgvVMlFkc1dI+gcwc=\",\"format\":\"google-gemini-v1\",\"id\":\"tool_weather_aaDFcPO0qsPIvlIQKSFc\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":39,\"completion_tokens\":16,\"total_tokens\":55,\"cost\":0.00003375,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00003375,\"upstream_inference_prompt_cost\":0.00000975,\"upstream_inference_completions_cost\":0.000024},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.10832375s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 973 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a19LCy6WJJsnCldFSEDCKuOZfohIqqdmMNnccTB8AkfBDwEgvVMlFkc1dI+gcwc=","format":"google-gemini-v1","id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945393-8ddmcZp5L5LzqkHANLRo\",\"object\":\"chat.completion\",\"created\":1773945393,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy, is around 40°C.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a1/ZVNqyUobkDK7efg2HaVbYd8w3q44BTWNmfAc08dK+yGFMHu2LZzjed8s0HcE=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":71,\"completion_tokens\":16,\"total_tokens\":87,\"cost\":0.00004175,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00004175,\"upstream_inference_prompt_cost\":0.00001775,\"upstream_inference_completions_cost\":0.000024},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.11676975s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml new file mode 100644 index 000000000..de6b47dd0 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml @@ -0,0 +1,113 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 557 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a195Y0+HaAqhhzh7Ftn/kaQm1mbI2DIUJEF/ivbMf4Ez5+eK1DaB2LIT89cnq2Q=","format":"google-gemini-v1","id":"tool_weather_JseIOiirEv9DOluhcBh6","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_JseIOiirEv9DOluhcBh6","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} + + data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":39,"completion_tokens":16,"total_tokens":55,"cost":0.00003375,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00003375,"upstream_inference_prompt_cost":0.00000975,"upstream_inference_completions_cost":0.000024},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 2.843115417s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1027 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_JseIOiirEv9DOluhcBh6","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a195Y0+HaAqhhzh7Ftn/kaQm1mbI2DIUJEF/ivbMf4Ez5+eK1DaB2LIT89cnq2Q=","format":"google-gemini-v1","id":"tool_weather_JseIOiirEv9DOluhcBh6","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_JseIOiirEv9DOluhcBh6","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"The weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" in Florence, Italy,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" is currently 40°C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a1+Ka9JkxfFogywc5shcRjkm5KIsFHylQ4DTSKSfz0vlhpZvMbmuDXajnxlKJLI=","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + + data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":73,"completion_tokens":15,"total_tokens":88,"cost":0.00004075,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00004075,"upstream_inference_prompt_cost":0.00001825,"upstream_inference_completions_cost":0.0000225},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 3.191008375s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool.yaml deleted file mode 100644 index 6630b5be7..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 842 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324050-bCRL875FlM7GNKziqHnP\",\"object\":\"chat.completion\",\"created\":1773324050,\"model\":\"z-ai/glm-4.5\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply the numbers 2 and 3 for you.\\n\",\"refusal\":null,\"reasoning\":\"\\nThe user wants me to both add and multiply the numbers 2 and 3. I have access to both the \\\"add\\\" and \\\"multiply\\\" functions, so I can call both of them with the parameters a=2 and b=3.\\n\\nLet me make both function calls:\\n1. add(2, 3)\\n2. multiply(2, 3)\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_58a4fee3fd9c40d0896a1bfb\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_3e6b9f76a2f74ed6baa5f12e\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\nThe user wants me to both add and multiply the numbers 2 and 3. I have access to both the \\\"add\\\" and \\\"multiply\\\" functions, so I can call both of them with the parameters a=2 and b=3.\\n\\nLet me make both function calls:\\n1. add(2, 3)\\n2. multiply(2, 3)\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":284,\"completion_tokens\":136,\"total_tokens\":420,\"cost\":0.00044853,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":43,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00044853,\"upstream_inference_prompt_cost\":0.00014933,\"upstream_inference_completions_cost\":0.0002992},\"completion_tokens_details\":{\"reasoning_tokens\":76,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 3.177698625s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1675 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.\n","tool_calls":[{"id":"call_58a4fee3fd9c40d0896a1bfb","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_3e6b9f76a2f74ed6baa5f12e","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"\nThe user wants me to both add and multiply the numbers 2 and 3. I have access to both the \"add\" and \"multiply\" functions, so I can call both of them with the parameters a=2 and b=3.\n\nLet me make both function calls:\n1. add(2, 3)\n2. multiply(2, 3)","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_58a4fee3fd9c40d0896a1bfb","role":"tool"},{"content":"6","tool_call_id":"call_3e6b9f76a2f74ed6baa5f12e","role":"tool"}],"model":"z-ai/glm-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324055-s02kvCiNioyJGsJcrceq\",\"object\":\"chat.completion\",\"created\":1773324055,\"model\":\"z-ai/glm-4.5\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The results are:\\n- Adding 2 and 3: 5\\n- Multiplying 2 and 3: 6\",\"refusal\":null,\"reasoning\":\"\\nThe function calls have returned the results:\\n- Adding 2 and 3 gives 5\\n- Multiplying 2 and 3 gives 6\\n\\nI should present both results clearly to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\nThe function calls have returned the results:\\n- Adding 2 and 3 gives 5\\n- Multiplying 2 and 3 gives 6\\n\\nI should present both results clearly to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":433,\"completion_tokens\":72,\"total_tokens\":505,\"cost\":0.00021289,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":419,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00021289,\"upstream_inference_prompt_cost\":0.00005449,\"upstream_inference_completions_cost\":0.0001584},\"completion_tokens_details\":{\"reasoning_tokens\":42,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 3.445616208s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool_streaming.yaml deleted file mode 100644 index 9a4fedc41..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/multi_tool_streaming.yaml +++ /dev/null @@ -1,405 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 879 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" numbers","reasoning_details":[{"type":"reasoning.text","text":" numbers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.text","text":" need","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" inputs","reasoning_details":[{"type":"reasoning.text","text":" inputs","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").\n\n","reasoning_details":[{"type":"reasoning.text","text":").\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"For","reasoning_details":[{"type":"reasoning.text","text":"For","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"For","reasoning_details":[{"type":"reasoning.text","text":"For","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \n","reasoning_details":[{"type":"reasoning.text","text":" \n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I","reasoning_details":[{"type":"reasoning.text","text":"I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" functions","reasoning_details":[{"type":"reasoning.text","text":" functions","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" these","reasoning_details":[{"type":"reasoning.text","text":" these","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameters","reasoning_details":[{"type":"reasoning.text","text":" parameters","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":".\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_6a11b6c05ee447799771c928","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_4431af3675844706982c27ec","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324058-dZa5em6CCB29zznhaofI","object":"chat.completion.chunk","created":1773324058,"model":"z-ai/glm-4.5","provider":"Novita","choices":[],"usage":{"prompt_tokens":280,"completion_tokens":143,"total_tokens":423,"cost":0.00035716,"is_byok":false,"prompt_tokens_details":{"cached_tokens":256,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00035716,"upstream_inference_prompt_cost":0.00004256,"upstream_inference_completions_cost":0.0003146},"completion_tokens_details":{"reasoning_tokens":82,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.14797225s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1755 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"\nI''ll add and multiply the numbers 2 and 3 for you.\n","tool_calls":[{"id":"call_6a11b6c05ee447799771c928","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_4431af3675844706982c27ec","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking me to add and multiply the numbers 2 and 3. I need to use both the add function and the multiply function with the same inputs (2 and 3).\n\nFor the add function:\n- a = 2\n- b = 3\n\nFor the multiply function:\n- a = 2 \n- b = 3\n\nI''ll call both functions with these parameters.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_6a11b6c05ee447799771c928","role":"tool"},{"content":"6","tool_call_id":"call_4431af3675844706982c27ec","role":"tool"}],"model":"z-ai/glm-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Adding","reasoning_details":[{"type":"reasoning.text","text":" Adding","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" gives","reasoning_details":[{"type":"reasoning.text","text":" gives","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Multip","reasoning_details":[{"type":"reasoning.text","text":" Multip","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"lying","reasoning_details":[{"type":"reasoning.text","text":"lying","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" gives","reasoning_details":[{"type":"reasoning.text","text":" gives","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I","reasoning_details":[{"type":"reasoning.text","text":"I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.text","text":" present","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" these","reasoning_details":[{"type":"reasoning.text","text":" these","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.text","text":" clearly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":":\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" Adding","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" Multip","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"lying","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324062-5ihkwbIAUS4cXNmrgV8p","object":"chat.completion.chunk","created":1773324062,"model":"z-ai/glm-4.5","provider":"Novita","choices":[],"usage":{"prompt_tokens":435,"completion_tokens":68,"total_tokens":503,"cost":0.00027242,"is_byok":false,"prompt_tokens_details":{"cached_tokens":282,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00027242,"upstream_inference_prompt_cost":0.00012282,"upstream_inference_completions_cost":0.0001496},"completion_tokens_details":{"reasoning_tokens":37,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.413508667s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple.yaml deleted file mode 100644 index 326ef7393..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 187 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324029-JPnY5xkTVM6SreU2loOi\",\"object\":\"chat.completion\",\"created\":1773324029,\"model\":\"z-ai/glm-4.5\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"\\nOlá! That's \\\"hi\\\" in Portuguese. \\n\\nIf you want to be more informal, you can also say \\\"Oi\\\" which is commonly used in Brazil.\",\"refusal\":null,\"reasoning\":\"The human is asking me to say \\\"hi\\\" in Portuguese. The Portuguese word for \\\"hi\\\" or \\\"hello\\\" is \\\"Olá\\\". I'll provide this translation and maybe add a bit more context about Portuguese greetings to be more helpful.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The human is asking me to say \\\"hi\\\" in Portuguese. The Portuguese word for \\\"hi\\\" or \\\"hello\\\" is \\\"Olá\\\". I'll provide this translation and maybe add a bit more context about Portuguese greetings to be more helpful.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":87,\"total_tokens\":103,\"cost\":0.00019659,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":9,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00019659,\"upstream_inference_prompt_cost\":0.00000519,\"upstream_inference_completions_cost\":0.0001914},\"completion_tokens_details\":{\"reasoning_tokens\":49,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.388520208s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple_streaming.yaml deleted file mode 100644 index 7734c83e1..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/simple_streaming.yaml +++ /dev/null @@ -1,204 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 241 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I","reasoning_details":[{"type":"reasoning.text","text":"I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.text","text":" need","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greeting","reasoning_details":[{"type":"reasoning.text","text":" greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.text","text":"\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" standard","reasoning_details":[{"type":"reasoning.text","text":" standard","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" friendly","reasoning_details":[{"type":"reasoning.text","text":" friendly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greeting","reasoning_details":[{"type":"reasoning.text","text":" greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used","reasoning_details":[{"type":"reasoning.text","text":" used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" situations","reasoning_details":[{"type":"reasoning.text","text":" situations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" There","reasoning_details":[{"type":"reasoning.text","text":" There","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" also","reasoning_details":[{"type":"reasoning.text","text":" also","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.text","text":" which","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal","reasoning_details":[{"type":"reasoning.text","text":" informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" similar","reasoning_details":[{"type":"reasoning.text","text":" similar","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Hi","reasoning_details":[{"type":"reasoning.text","text":"Hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" English","reasoning_details":[{"type":"reasoning.text","text":" English","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.text","text":" Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" request","reasoning_details":[{"type":"reasoning.text","text":" request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.text","text":" simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" doesn","reasoning_details":[{"type":"reasoning.text","text":" doesn","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'t","reasoning_details":[{"type":"reasoning.text","text":"'t","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specify","reasoning_details":[{"type":"reasoning.text","text":" specify","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" form","reasoning_details":[{"type":"reasoning.text","text":" form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ality","reasoning_details":[{"type":"reasoning.text","text":"ality","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universally","reasoning_details":[{"type":"reasoning.text","text":" universally","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" appropriate","reasoning_details":[{"type":"reasoning.text","text":" appropriate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324032-BB5Bz02Qyy8Wc5LPmWVO","object":"chat.completion.chunk","created":1773324032,"model":"z-ai/glm-4.5","provider":"Novita","choices":[],"usage":{"prompt_tokens":16,"completion_tokens":86,"total_tokens":102,"cost":0.00019145,"is_byok":false,"prompt_tokens_details":{"cached_tokens":15,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00019145,"upstream_inference_prompt_cost":0.00000225,"upstream_inference_completions_cost":0.0001892},"completion_tokens_details":{"reasoning_tokens":79,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 759.130333ms diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool.yaml deleted file mode 100644 index 9a40311b2..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 479 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324034-8wFcOZ85dhprBktxwDQI\",\"object\":\"chat.completion\",\"created\":1773324034,\"model\":\"z-ai/glm-4.5\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll check the weather in Florence, Italy for you.\\n\",\"refusal\":null,\"reasoning\":\"\\nThe user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided \\\"Florence, Italy\\\" as the location. I should use this exact location string when calling the function.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_a2a3ce77cc02433e93b5a5be\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\nThe user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided \\\"Florence, Italy\\\" as the location. I should use this exact location string when calling the function.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":178,\"completion_tokens\":83,\"total_tokens\":261,\"cost\":0.00026833,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":43,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00026833,\"upstream_inference_prompt_cost\":0.00008573,\"upstream_inference_completions_cost\":0.0001826},\"completion_tokens_details\":{\"reasoning_tokens\":52,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 5.335454333s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1134 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.\n","tool_calls":[{"id":"call_a2a3ce77cc02433e93b5a5be","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"\nThe user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided \"Florence, Italy\" as the location. I should use this exact location string when calling the function.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_a2a3ce77cc02433e93b5a5be","role":"tool"}],"model":"z-ai/glm-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324040-z292tRfVyhCylAVz3rEa\",\"object\":\"chat.completion\",\"created\":1773324040,\"model\":\"z-ai/glm-4.5\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C, which is quite warm!\",\"refusal\":null,\"reasoning\":\"\\nThe weather function returned that the temperature in Florence, Italy is 40°C. This is quite hot! I should provide this information to the user in a clear and helpful way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\nThe weather function returned that the temperature in Florence, Italy is 40°C. This is quite hot! I should provide this information to the user in a clear and helpful way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":269,\"completion_tokens\":58,\"total_tokens\":327,\"cost\":0.0001616,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":260,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001616,\"upstream_inference_prompt_cost\":0.000034,\"upstream_inference_completions_cost\":0.0001276},\"completion_tokens_details\":{\"reasoning_tokens\":37,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.773174916s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool_streaming.yaml deleted file mode 100644 index 1747f2447..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.5/tool_streaming.yaml +++ /dev/null @@ -1,371 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 533 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" access","reasoning_details":[{"type":"reasoning.text","text":" access","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" requires","reasoning_details":[{"type":"reasoning.text","text":" requires","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" has","reasoning_details":[{"type":"reasoning.text","text":" has","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flo","reasoning_details":[{"type":"reasoning.text","text":"Flo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"rence","reasoning_details":[{"type":"reasoning.text","text":"rence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.text","text":"Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" exact","reasoning_details":[{"type":"reasoning.text","text":" exact","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" value","reasoning_details":[{"type":"reasoning.text","text":" value","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" by","reasoning_details":[{"type":"reasoning.text","text":" by","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" check","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":".\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_41f85dbc4f6043e4998c612a","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324043-x0rKWKEIG9euQGgS9Q64","object":"chat.completion.chunk","created":1773324043,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[],"usage":{"prompt_tokens":178,"completion_tokens":87,"total_tokens":265,"cost":0.00021147,"is_byok":false,"prompt_tokens_details":{"cached_tokens":177,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00021147,"upstream_inference_prompt_cost":0.00002007,"upstream_inference_completions_cost":0.0001914},"completion_tokens_details":{"reasoning_tokens":56,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 3.156603917s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1202 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.\n","tool_calls":[{"id":"call_41f85dbc4f6043e4998c612a","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user is asking for the weather in Florence, Italy. I have access to a weather function that requires a location parameter. The user has provided \"Florence,Italy\" as the location. I should use this exact value as provided by the user for the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_41f85dbc4f6043e4998c612a","role":"tool"}],"model":"z-ai/glm-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" C","reasoning_details":[{"type":"reasoning.text","text":" C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.text","text":" which","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" means","reasoning_details":[{"type":"reasoning.text","text":" means","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" degrees","reasoning_details":[{"type":"reasoning.text","text":" degrees","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Celsius","reasoning_details":[{"type":"reasoning.text","text":" Celsius","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clear","reasoning_details":[{"type":"reasoning.text","text":" clear","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":").","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"'s","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" shade","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"'re","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" out","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" about","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324046-3H5BZM5C70ATNICGsa3W","object":"chat.completion.chunk","created":1773324046,"model":"z-ai/glm-4.5","provider":"Z.AI","choices":[],"usage":{"prompt_tokens":273,"completion_tokens":83,"total_tokens":356,"cost":0.00032533,"is_byok":false,"prompt_tokens_details":{"cached_tokens":43,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00032533,"upstream_inference_prompt_cost":0.00014273,"upstream_inference_completions_cost":0.0001826},"completion_tokens_details":{"reasoning_tokens":42,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 4.408586333s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool.yaml deleted file mode 100644 index bb07099fd..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 842 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324161-yjtNTefaJWjsI5zgag7U\",\"object\":\"chat.completion\",\"created\":1773324161,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply the numbers 2 and 3 for you.\",\"refusal\":null,\"reasoning\":\"The user wants me to add and multiply the numbers 2 and 3. I have two functions available: add and multiply. I need to use both functions with the parameters a=2 and b=3 for each function.\\n\\nLet me call both functions:\\n- add(2, 3)\\n- multiply(2, 3)\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_3eff2456fc494463924f094a\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_40575b9277094086b33d1d42\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to add and multiply the numbers 2 and 3. I have two functions available: add and multiply. I need to use both functions with the parameters a=2 and b=3 for each function.\\n\\nLet me call both functions:\\n- add(2, 3)\\n- multiply(2, 3)\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":279,\"completion_tokens\":115,\"total_tokens\":394,\"cost\":0.00038797,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00038797,\"upstream_inference_prompt_cost\":0.00013497,\"upstream_inference_completions_cost\":0.000253},\"completion_tokens_details\":{\"reasoning_tokens\":68,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.011245708s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1667 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"call_3eff2456fc494463924f094a","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_40575b9277094086b33d1d42","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to add and multiply the numbers 2 and 3. I have two functions available: add and multiply. I need to use both functions with the parameters a=2 and b=3 for each function.\n\nLet me call both functions:\n- add(2, 3)\n- multiply(2, 3)","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_3eff2456fc494463924f094a","role":"tool"},{"content":"6","tool_call_id":"call_40575b9277094086b33d1d42","role":"tool"}],"model":"z-ai/glm-4.6","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324165-M23dnD2Z2GRyI2JcJIDj\",\"object\":\"chat.completion\",\"created\":1773324165,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results for the numbers 2 and 3:\\n\\n- **Addition**: 2 + 3 = 5\\n- **Multiplication**: 2 × 3 = 6\",\"refusal\":null,\"reasoning\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\\n\\nI should provide a clear summary to the user of both results.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\\n\\nI should provide a clear summary to the user of both results.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":402,\"completion_tokens\":84,\"total_tokens\":486,\"cost\":0.00023342,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":392,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00023342,\"upstream_inference_prompt_cost\":0.00004862,\"upstream_inference_completions_cost\":0.0001848},\"completion_tokens_details\":{\"reasoning_tokens\":42,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 3.195246417s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool_streaming.yaml deleted file mode 100644 index 21407bc70..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/multi_tool_streaming.yaml +++ /dev/null @@ -1,361 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 879 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" numbers","reasoning_details":[{"type":"reasoning.text","text":" numbers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" functions","reasoning_details":[{"type":"reasoning.text","text":" functions","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" available","reasoning_details":[{"type":"reasoning.text","text":" available","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" instructions","reasoning_details":[{"type":"reasoning.text","text":" instructions","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" always","reasoning_details":[{"type":"reasoning.text","text":" always","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.text","text":" at","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.text","text":" time","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" So","reasoning_details":[{"type":"reasoning.text","text":" So","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.text","text":" need","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" functions","reasoning_details":[{"type":"reasoning.text","text":" functions","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameters","reasoning_details":[{"type":"reasoning.text","text":" parameters","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_c02817b0e63e4f9db2208d62","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_0e54f1f590bd45b4a7972f5f","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324169-R35AraloGop4RPqk2TgM","object":"chat.completion.chunk","created":1773324169,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":275,"completion_tokens":107,"total_tokens":382,"cost":0.00027665,"is_byok":false,"prompt_tokens_details":{"cached_tokens":250,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00027665,"upstream_inference_prompt_cost":0.00004125,"upstream_inference_completions_cost":0.0002354},"completion_tokens_details":{"reasoning_tokens":60,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.016894958s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1708 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"call_c02817b0e63e4f9db2208d62","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_0e54f1f590bd45b4a7972f5f","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants me to add and multiply the numbers 2 and 3. I have both the add and multiply functions available, and the instructions say to always use both add and multiply at the same time. So I need to call both functions with the parameters a=2 and b=3.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_c02817b0e63e4f9db2208d62","role":"tool"},{"content":"6","tool_call_id":"call_0e54f1f590bd45b4a7972f5f","role":"tool"}],"model":"z-ai/glm-4.6","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" +","reasoning_details":[{"type":"reasoning.text","text":" +","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ×","reasoning_details":[{"type":"reasoning.text","text":" ×","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").","reasoning_details":[{"type":"reasoning.text","text":").","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Both","reasoning_details":[{"type":"reasoning.text","text":" Both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calculations","reasoning_details":[{"type":"reasoning.text","text":" calculations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" correct","reasoning_details":[{"type":"reasoning.text","text":" correct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":":\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"Add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"Multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324172-Qio6Nbp2y2zBzBcW6fRM","object":"chat.completion.chunk","created":1773324172,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":389,"completion_tokens":67,"total_tokens":456,"cost":0.00024079,"is_byok":false,"prompt_tokens_details":{"cached_tokens":274,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00024079,"upstream_inference_prompt_cost":0.00009339,"upstream_inference_completions_cost":0.0001474},"completion_tokens_details":{"reasoning_tokens":36,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 963.181708ms diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple.yaml deleted file mode 100644 index 3f7be0ebe..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 187 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324064-bCxdmtgLzZ9hRfv3kUJn\",\"object\":\"chat.completion\",\"created\":1773324064,\"model\":\"z-ai/glm-4.6\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi!\",\"refusal\":null,\"reasoning\":\"1. **Identify the user's request:** The user wants me to say \\\"hi\\\" in Portuguese.\\n\\n2. **Retrieve knowledge about Portuguese greetings:**\\n * \\\"Olá\\\" is the standard, slightly formal but versatile greeting (equivalent to \\\"Hello\\\").\\n * \\\"Oi\\\" is the informal, common greeting (equivalent to \\\"Hi\\\").\\n * \\\"Oi, tudo bem?\\\" (Hi, how are you?) is also very common.\\n\\n3. **Select the best response:** Since the user specifically asked to \\\"say hi\\\", \\\"Oi\\\" is the most direct translation. However, providing \\\"Olá\\\" as well adds value and covers different contexts.\\n\\n4. **Draft the response:**\\n * Option 1: \\\"Oi!\\\"\\n * Option 2: \\\"Olá!\\\"\\n * Option 3: \\\"Oi! or Olá!\\\"\\n\\n5. **Final Polish:** A simple, direct answer is usually best for this type of query.\\n\\n * \\\"Oi!\\\"\\n\\n (I could also add \\\"Olá\\\" for completeness).\\n\\n6. **Final Output Generation:** \\\"Oi!\\\" or \\\"Olá!\\\" are both correct. I will provide the most common informal one first, or just the standard one. Let's go with \\\"Oi!\\\" as it matches \\\"hi\\\" well, but maybe list both.\\n\\n * *Result:* \\\"Oi!\\\" (or \\\"Olá!\\\")\\n\\n Let's just give the most direct translation.\\n\\n \\\"Oi!\\\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"1. **Identify the user's request:** The user wants me to say \\\"hi\\\" in Portuguese.\\n\\n2. **Retrieve knowledge about Portuguese greetings:**\\n * \\\"Olá\\\" is the standard, slightly formal but versatile greeting (equivalent to \\\"Hello\\\").\\n * \\\"Oi\\\" is the informal, common greeting (equivalent to \\\"Hi\\\").\\n * \\\"Oi, tudo bem?\\\" (Hi, how are you?) is also very common.\\n\\n3. **Select the best response:** Since the user specifically asked to \\\"say hi\\\", \\\"Oi\\\" is the most direct translation. However, providing \\\"Olá\\\" as well adds value and covers different contexts.\\n\\n4. **Draft the response:**\\n * Option 1: \\\"Oi!\\\"\\n * Option 2: \\\"Olá!\\\"\\n * Option 3: \\\"Oi! or Olá!\\\"\\n\\n5. **Final Polish:** A simple, direct answer is usually best for this type of query.\\n\\n * \\\"Oi!\\\"\\n\\n (I could also add \\\"Olá\\\" for completeness).\\n\\n6. **Final Output Generation:** \\\"Oi!\\\" or \\\"Olá!\\\" are both correct. I will provide the most common informal one first, or just the standard one. Let's go with \\\"Oi!\\\" as it matches \\\"hi\\\" well, but maybe list both.\\n\\n * *Result:* \\\"Oi!\\\" (or \\\"Olá!\\\")\\n\\n Let's just give the most direct translation.\\n\\n \\\"Oi!\\\"\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":15,\"completion_tokens\":314,\"total_tokens\":329,\"cost\":0.00055296,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":4,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00055296,\"upstream_inference_prompt_cost\":0.0000066,\"upstream_inference_completions_cost\":0.00054636},\"completion_tokens_details\":{\"reasoning_tokens\":310,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.620134375s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple_streaming.yaml deleted file mode 100644 index c59ef6630..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/simple_streaming.yaml +++ /dev/null @@ -1,1388 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 241 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". ","reasoning_details":[{"type":"reasoning.text","text":". ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **An","reasoning_details":[{"type":"reasoning.text","text":" **An","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"alyze the","reasoning_details":[{"type":"reasoning.text","text":"alyze the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s request","reasoning_details":[{"type":"reasoning.text","text":"'s request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":** The","reasoning_details":[{"type":"reasoning.text","text":":** The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user wants","reasoning_details":[{"type":"reasoning.text","text":" user wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to know","reasoning_details":[{"type":"reasoning.text","text":" to know","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" how to","reasoning_details":[{"type":"reasoning.text","text":" how to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say \"","reasoning_details":[{"type":"reasoning.text","text":" say \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi\"","reasoning_details":[{"type":"reasoning.text","text":"hi\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in Portuguese","reasoning_details":[{"type":"reasoning.text","text":" in Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". This","reasoning_details":[{"type":"reasoning.text","text":". This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is a","reasoning_details":[{"type":"reasoning.text","text":" is a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very simple","reasoning_details":[{"type":"reasoning.text","text":" very simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", direct","reasoning_details":[{"type":"reasoning.text","text":", direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation request","reasoning_details":[{"type":"reasoning.text","text":" translation request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n2","reasoning_details":[{"type":"reasoning.text","text":".\n\n2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". ","reasoning_details":[{"type":"reasoning.text","text":". ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Ident","reasoning_details":[{"type":"reasoning.text","text":" **Ident","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ify the","reasoning_details":[{"type":"reasoning.text","text":"ify the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" core task","reasoning_details":[{"type":"reasoning.text","text":" core task","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":** Provide","reasoning_details":[{"type":"reasoning.text","text":":** Provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the Portuguese","reasoning_details":[{"type":"reasoning.text","text":" the Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" equivalent","reasoning_details":[{"type":"reasoning.text","text":" equivalent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of \"","reasoning_details":[{"type":"reasoning.text","text":" of \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi\".\n\n","reasoning_details":[{"type":"reasoning.text","text":"hi\".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3.","reasoning_details":[{"type":"reasoning.text","text":"3.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Brainstorm","reasoning_details":[{"type":"reasoning.text","text":"Brainstorm","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greetings","reasoning_details":[{"type":"reasoning.text","text":" greetings","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n ","reasoning_details":[{"type":"reasoning.text","text":"**\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Ol","reasoning_details":[{"type":"reasoning.text","text":" \"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á\"","reasoning_details":[{"type":"reasoning.text","text":"á\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - This","reasoning_details":[{"type":"reasoning.text","text":" - This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is the","reasoning_details":[{"type":"reasoning.text","text":" is the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most direct","reasoning_details":[{"type":"reasoning.text","text":" most direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and common","reasoning_details":[{"type":"reasoning.text","text":" and common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation of","reasoning_details":[{"type":"reasoning.text","text":" translation of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"hello","reasoning_details":[{"type":"reasoning.text","text":" \"hello","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" or","reasoning_details":[{"type":"reasoning.text","text":"\" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"hi","reasoning_details":[{"type":"reasoning.text","text":" \"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\". It","reasoning_details":[{"type":"reasoning.text","text":"\". It","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s universally","reasoning_details":[{"type":"reasoning.text","text":"'s universally","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" understood in","reasoning_details":[{"type":"reasoning.text","text":" understood in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal and","reasoning_details":[{"type":"reasoning.text","text":" Portugal and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil.","reasoning_details":[{"type":"reasoning.text","text":" Brazil.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" It's","reasoning_details":[{"type":"reasoning.text","text":" It's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" neutral in","reasoning_details":[{"type":"reasoning.text","text":" neutral in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" form","reasoning_details":[{"type":"reasoning.text","text":" form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ality.\n","reasoning_details":[{"type":"reasoning.text","text":"ality.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi\"","reasoning_details":[{"type":"reasoning.text","text":"Oi\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - This","reasoning_details":[{"type":"reasoning.text","text":" - This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is very","reasoning_details":[{"type":"reasoning.text","text":" is very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common,","reasoning_details":[{"type":"reasoning.text","text":" common,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" especially in","reasoning_details":[{"type":"reasoning.text","text":" especially in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil.","reasoning_details":[{"type":"reasoning.text","text":" Brazil.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" It's","reasoning_details":[{"type":"reasoning.text","text":" It's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal","reasoning_details":[{"type":"reasoning.text","text":" informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" like a","reasoning_details":[{"type":"reasoning.text","text":" like a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" friendly","reasoning_details":[{"type":"reasoning.text","text":" friendly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"hi","reasoning_details":[{"type":"reasoning.text","text":" \"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" or","reasoning_details":[{"type":"reasoning.text","text":"\" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"hey","reasoning_details":[{"type":"reasoning.text","text":" \"hey","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\". It","reasoning_details":[{"type":"reasoning.text","text":"\". It","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s less","reasoning_details":[{"type":"reasoning.text","text":"'s less","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common in","reasoning_details":[{"type":"reasoning.text","text":" common in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal,","reasoning_details":[{"type":"reasoning.text","text":" Portugal,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" where it","reasoning_details":[{"type":"reasoning.text","text":" where it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can sometimes","reasoning_details":[{"type":"reasoning.text","text":" can sometimes","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" sound a","reasoning_details":[{"type":"reasoning.text","text":" sound a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" bit too","reasoning_details":[{"type":"reasoning.text","text":" bit too","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal or","reasoning_details":[{"type":"reasoning.text","text":" informal or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" even slightly","reasoning_details":[{"type":"reasoning.text","text":" even slightly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" dismissive","reasoning_details":[{"type":"reasoning.text","text":" dismissive","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" depending on","reasoning_details":[{"type":"reasoning.text","text":" depending on","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the context","reasoning_details":[{"type":"reasoning.text","text":" the context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", but","reasoning_details":[{"type":"reasoning.text","text":", but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it's","reasoning_details":[{"type":"reasoning.text","text":" it's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" still understood","reasoning_details":[{"type":"reasoning.text","text":" still understood","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"B","reasoning_details":[{"type":"reasoning.text","text":" \"B","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"om dia","reasoning_details":[{"type":"reasoning.text","text":"om dia","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" -","reasoning_details":[{"type":"reasoning.text","text":"\" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Good","reasoning_details":[{"type":"reasoning.text","text":" \"Good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" morning\".","reasoning_details":[{"type":"reasoning.text","text":" morning\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Used","reasoning_details":[{"type":"reasoning.text","text":" Used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" until","reasoning_details":[{"type":"reasoning.text","text":" until","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" noon.\n","reasoning_details":[{"type":"reasoning.text","text":" noon.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Boa","reasoning_details":[{"type":"reasoning.text","text":"Boa","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tarde\"","reasoning_details":[{"type":"reasoning.text","text":" tarde\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - \"","reasoning_details":[{"type":"reasoning.text","text":" - \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Good afternoon","reasoning_details":[{"type":"reasoning.text","text":"Good afternoon","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\". Used","reasoning_details":[{"type":"reasoning.text","text":"\". Used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" from noon","reasoning_details":[{"type":"reasoning.text","text":" from noon","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" until sunset","reasoning_details":[{"type":"reasoning.text","text":" until sunset","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/d","reasoning_details":[{"type":"reasoning.text","text":"/d","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ark","reasoning_details":[{"type":"reasoning.text","text":"ark","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Bo","reasoning_details":[{"type":"reasoning.text","text":" \"Bo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"a noite","reasoning_details":[{"type":"reasoning.text","text":"a noite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" -","reasoning_details":[{"type":"reasoning.text","text":"\" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Good","reasoning_details":[{"type":"reasoning.text","text":" \"Good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" evening\"","reasoning_details":[{"type":"reasoning.text","text":" evening\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or \"","reasoning_details":[{"type":"reasoning.text","text":" or \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Good night","reasoning_details":[{"type":"reasoning.text","text":"Good night","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\". Used","reasoning_details":[{"type":"reasoning.text","text":"\". Used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" after dark","reasoning_details":[{"type":"reasoning.text","text":" after dark","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". Can","reasoning_details":[{"type":"reasoning.text","text":". Can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be used","reasoning_details":[{"type":"reasoning.text","text":" be used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both as","reasoning_details":[{"type":"reasoning.text","text":" both as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a greeting","reasoning_details":[{"type":"reasoning.text","text":" a greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and a","reasoning_details":[{"type":"reasoning.text","text":" and a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" farewell.\n","reasoning_details":[{"type":"reasoning.text","text":" farewell.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"E a","reasoning_details":[{"type":"reasoning.text","text":"E a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"í?\"","reasoning_details":[{"type":"reasoning.text","text":"í?\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" / \"","reasoning_details":[{"type":"reasoning.text","text":" / \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"E ai","reasoning_details":[{"type":"reasoning.text","text":"E ai","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"","reasoning_details":[{"type":"reasoning.text","text":"?\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - \"","reasoning_details":[{"type":"reasoning.text","text":" - \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.text","text":"What's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" up?\"","reasoning_details":[{"type":"reasoning.text","text":" up?\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Very informal","reasoning_details":[{"type":"reasoning.text","text":" Very informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", common","reasoning_details":[{"type":"reasoning.text","text":", common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in Brazil","reasoning_details":[{"type":"reasoning.text","text":" in Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"T","reasoning_details":[{"type":"reasoning.text","text":" \"T","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"udo bem","reasoning_details":[{"type":"reasoning.text","text":"udo bem","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\" -","reasoning_details":[{"type":"reasoning.text","text":"?\" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"How","reasoning_details":[{"type":"reasoning.text","text":" \"How","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" you?\"","reasoning_details":[{"type":"reasoning.text","text":" you?\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" / \"","reasoning_details":[{"type":"reasoning.text","text":" / \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Is","reasoning_details":[{"type":"reasoning.text","text":"Is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" everything well","reasoning_details":[{"type":"reasoning.text","text":" everything well","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\" Often","reasoning_details":[{"type":"reasoning.text","text":"?\" Often","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used as","reasoning_details":[{"type":"reasoning.text","text":" used as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a greeting","reasoning_details":[{"type":"reasoning.text","text":" a greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" itself,","reasoning_details":[{"type":"reasoning.text","text":" itself,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" like","reasoning_details":[{"type":"reasoning.text","text":" like","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Hey","reasoning_details":[{"type":"reasoning.text","text":" \"Hey","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", how","reasoning_details":[{"type":"reasoning.text","text":", how","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s it","reasoning_details":[{"type":"reasoning.text","text":"'s it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" going?\"","reasoning_details":[{"type":"reasoning.text","text":" going?\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n4","reasoning_details":[{"type":"reasoning.text","text":".\n\n4","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". ","reasoning_details":[{"type":"reasoning.text","text":". ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Structure","reasoning_details":[{"type":"reasoning.text","text":" **Structure","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the answer","reasoning_details":[{"type":"reasoning.text","text":" the answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":** I","reasoning_details":[{"type":"reasoning.text","text":":** I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need to","reasoning_details":[{"type":"reasoning.text","text":" need to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide the","reasoning_details":[{"type":"reasoning.text","text":" provide the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most common","reasoning_details":[{"type":"reasoning.text","text":" most common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and useful","reasoning_details":[{"type":"reasoning.text","text":" and useful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answers","reasoning_details":[{"type":"reasoning.text","text":" answers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" first,","reasoning_details":[{"type":"reasoning.text","text":" first,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" then add","reasoning_details":[{"type":"reasoning.text","text":" then add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" context","reasoning_details":[{"type":"reasoning.text","text":" context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and nu","reasoning_details":[{"type":"reasoning.text","text":" and nu","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ance.","reasoning_details":[{"type":"reasoning.text","text":"ance.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" A good","reasoning_details":[{"type":"reasoning.text","text":" A good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" structure would","reasoning_details":[{"type":"reasoning.text","text":" structure would","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be:\n","reasoning_details":[{"type":"reasoning.text","text":" be:\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Start","reasoning_details":[{"type":"reasoning.text","text":" Start","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with the","reasoning_details":[{"type":"reasoning.text","text":" with the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most direct","reasoning_details":[{"type":"reasoning.text","text":" most direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and universally","reasoning_details":[{"type":"reasoning.text","text":" and universally","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" understood translation","reasoning_details":[{"type":"reasoning.text","text":" understood translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Offer","reasoning_details":[{"type":"reasoning.text","text":" Offer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", slightly","reasoning_details":[{"type":"reasoning.text","text":", slightly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more informal","reasoning_details":[{"type":"reasoning.text","text":" more informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative,","reasoning_details":[{"type":"reasoning.text","text":" alternative,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and explain","reasoning_details":[{"type":"reasoning.text","text":" and explain","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the regional","reasoning_details":[{"type":"reasoning.text","text":" the regional","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" difference (","reasoning_details":[{"type":"reasoning.text","text":" difference (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Brazil vs","reasoning_details":[{"type":"reasoning.text","text":"Brazil vs","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". Portugal","reasoning_details":[{"type":"reasoning.text","text":". Portugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").\n ","reasoning_details":[{"type":"reasoning.text","text":").\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Provide the","reasoning_details":[{"type":"reasoning.text","text":" Provide the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time-of","reasoning_details":[{"type":"reasoning.text","text":" time-of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-day greetings","reasoning_details":[{"type":"reasoning.text","text":"-day greetings","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", as","reasoning_details":[{"type":"reasoning.text","text":", as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they are","reasoning_details":[{"type":"reasoning.text","text":" they are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common and","reasoning_details":[{"type":"reasoning.text","text":" common and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" polite","reasoning_details":[{"type":"reasoning.text","text":" polite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Add a","reasoning_details":[{"type":"reasoning.text","text":" Add a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" few","reasoning_details":[{"type":"reasoning.text","text":" few","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal options","reasoning_details":[{"type":"reasoning.text","text":" informal options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for a","reasoning_details":[{"type":"reasoning.text","text":" for a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" complete answer","reasoning_details":[{"type":"reasoning.text","text":" complete answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Sum","reasoning_details":[{"type":"reasoning.text","text":" Sum","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"marize","reasoning_details":[{"type":"reasoning.text","text":"marize","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" give a","reasoning_details":[{"type":"reasoning.text","text":" give a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" concluding tip","reasoning_details":[{"type":"reasoning.text","text":" concluding tip","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n5","reasoning_details":[{"type":"reasoning.text","text":".\n\n5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". ","reasoning_details":[{"type":"reasoning.text","text":". ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Draft","reasoning_details":[{"type":"reasoning.text","text":" **Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the response","reasoning_details":[{"type":"reasoning.text","text":" the response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (inc","reasoning_details":[{"type":"reasoning.text","text":" (inc","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"orporating","reasoning_details":[{"type":"reasoning.text","text":"orporating","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the structure","reasoning_details":[{"type":"reasoning.text","text":" the structure","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"):**\n\n","reasoning_details":[{"type":"reasoning.text","text":"):**\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Start","reasoning_details":[{"type":"reasoning.text","text":"Start","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with the","reasoning_details":[{"type":"reasoning.text","text":" with the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" main one","reasoning_details":[{"type":"reasoning.text","text":" main one","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":** \"","reasoning_details":[{"type":"reasoning.text","text":":** \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Olá","reasoning_details":[{"type":"reasoning.text","text":"Olá","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\" This","reasoning_details":[{"type":"reasoning.text","text":"!\" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is the","reasoning_details":[{"type":"reasoning.text","text":" is the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" perfect","reasoning_details":[{"type":"reasoning.text","text":" perfect","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" starting point","reasoning_details":[{"type":"reasoning.text","text":" starting point","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". It","reasoning_details":[{"type":"reasoning.text","text":". It","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s the","reasoning_details":[{"type":"reasoning.text","text":"'s the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct answer","reasoning_details":[{"type":"reasoning.text","text":" direct answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Say","reasoning_details":[{"type":"reasoning.text","text":" \"Say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi in","reasoning_details":[{"type":"reasoning.text","text":" hi in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese\".","reasoning_details":[{"type":"reasoning.text","text":" Portuguese\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I should","reasoning_details":[{"type":"reasoning.text","text":" I should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add a","reasoning_details":[{"type":"reasoning.text","text":" add a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" little note","reasoning_details":[{"type":"reasoning.text","text":" little note","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about its","reasoning_details":[{"type":"reasoning.text","text":" about its","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" pronunciation (","reasoning_details":[{"type":"reasoning.text","text":" pronunciation (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"oh-L","reasoning_details":[{"type":"reasoning.text","text":"oh-L","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"AH)","reasoning_details":[{"type":"reasoning.text","text":"AH)","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to be","reasoning_details":[{"type":"reasoning.text","text":" to be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" extra helpful","reasoning_details":[{"type":"reasoning.text","text":" extra helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n ","reasoning_details":[{"type":"reasoning.text","text":".\n\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Add","reasoning_details":[{"type":"reasoning.text","text":" **Add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the informal","reasoning_details":[{"type":"reasoning.text","text":" the informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative:**","reasoning_details":[{"type":"reasoning.text","text":" alternative:**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Oi","reasoning_details":[{"type":"reasoning.text","text":" \"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\" is","reasoning_details":[{"type":"reasoning.text","text":"!\" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" next logical","reasoning_details":[{"type":"reasoning.text","text":" next logical","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" step","reasoning_details":[{"type":"reasoning.text","text":" step","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". I","reasoning_details":[{"type":"reasoning.text","text":". I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" must explain","reasoning_details":[{"type":"reasoning.text","text":" must explain","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" its","reasoning_details":[{"type":"reasoning.text","text":" its","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" context","reasoning_details":[{"type":"reasoning.text","text":" context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". \"","reasoning_details":[{"type":"reasoning.text","text":". \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"This","reasoning_details":[{"type":"reasoning.text","text":"This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is very","reasoning_details":[{"type":"reasoning.text","text":" is very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common in","reasoning_details":[{"type":"reasoning.text","text":" common in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil and","reasoning_details":[{"type":"reasoning.text","text":" Brazil and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is like","reasoning_details":[{"type":"reasoning.text","text":" is like","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a friendly","reasoning_details":[{"type":"reasoning.text","text":" a friendly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" 'hey","reasoning_details":[{"type":"reasoning.text","text":" 'hey","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'.","reasoning_details":[{"type":"reasoning.text","text":"'.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" It","reasoning_details":[{"type":"reasoning.text","text":" It","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s less","reasoning_details":[{"type":"reasoning.text","text":"'s less","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common in","reasoning_details":[{"type":"reasoning.text","text":" common in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal.\"","reasoning_details":[{"type":"reasoning.text","text":" Portugal.\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This is","reasoning_details":[{"type":"reasoning.text","text":" This is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a crucial","reasoning_details":[{"type":"reasoning.text","text":" a crucial","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" piece","reasoning_details":[{"type":"reasoning.text","text":" piece","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of information","reasoning_details":[{"type":"reasoning.text","text":" of information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for a","reasoning_details":[{"type":"reasoning.text","text":" for a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" learner.\n\n","reasoning_details":[{"type":"reasoning.text","text":" learner.\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Introduce","reasoning_details":[{"type":"reasoning.text","text":"Introduce","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time-of","reasoning_details":[{"type":"reasoning.text","text":" time-of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-day greetings","reasoning_details":[{"type":"reasoning.text","text":"-day greetings","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":** These","reasoning_details":[{"type":"reasoning.text","text":":** These","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are essential","reasoning_details":[{"type":"reasoning.text","text":" are essential","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for anyone","reasoning_details":[{"type":"reasoning.text","text":" for anyone","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wanting","reasoning_details":[{"type":"reasoning.text","text":" wanting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to sound","reasoning_details":[{"type":"reasoning.text","text":" to sound","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" natural.","reasoning_details":[{"type":"reasoning.text","text":" natural.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'll","reasoning_details":[{"type":"reasoning.text","text":" I'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" list them","reasoning_details":[{"type":"reasoning.text","text":" list them","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with their","reasoning_details":[{"type":"reasoning.text","text":" with their","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" English translations","reasoning_details":[{"type":"reasoning.text","text":" English translations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and the","reasoning_details":[{"type":"reasoning.text","text":" and the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time they","reasoning_details":[{"type":"reasoning.text","text":" time they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are used","reasoning_details":[{"type":"reasoning.text","text":" are used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Bom","reasoning_details":[{"type":"reasoning.text","text":"Bom","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" dia**","reasoning_details":[{"type":"reasoning.text","text":" dia**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - Good","reasoning_details":[{"type":"reasoning.text","text":" - Good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" morning (","reasoning_details":[{"type":"reasoning.text","text":" morning (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"used","reasoning_details":[{"type":"reasoning.text","text":"used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" until around","reasoning_details":[{"type":"reasoning.text","text":" until around","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" noon)\n","reasoning_details":[{"type":"reasoning.text","text":" noon)\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Boa","reasoning_details":[{"type":"reasoning.text","text":"Boa","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tarde**","reasoning_details":[{"type":"reasoning.text","text":" tarde**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - Good","reasoning_details":[{"type":"reasoning.text","text":" - Good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" afternoon (","reasoning_details":[{"type":"reasoning.text","text":" afternoon (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"from","reasoning_details":[{"type":"reasoning.text","text":"from","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" noon","reasoning_details":[{"type":"reasoning.text","text":" noon","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" until sunset","reasoning_details":[{"type":"reasoning.text","text":" until sunset","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")\n ","reasoning_details":[{"type":"reasoning.text","text":")\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Bo","reasoning_details":[{"type":"reasoning.text","text":" **Bo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"a noite","reasoning_details":[{"type":"reasoning.text","text":"a noite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"** -","reasoning_details":[{"type":"reasoning.text","text":"** -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Good evening","reasoning_details":[{"type":"reasoning.text","text":" Good evening","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" / Good","reasoning_details":[{"type":"reasoning.text","text":" / Good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" night (","reasoning_details":[{"type":"reasoning.text","text":" night (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"used after","reasoning_details":[{"type":"reasoning.text","text":"used after","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" dark)\n\n","reasoning_details":[{"type":"reasoning.text","text":" dark)\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add more","reasoning_details":[{"type":"reasoning.text","text":"Add more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal/","reasoning_details":[{"type":"reasoning.text","text":" informal/","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"collo","reasoning_details":[{"type":"reasoning.text","text":"collo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"quial","reasoning_details":[{"type":"reasoning.text","text":"quial","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" options:**","reasoning_details":[{"type":"reasoning.text","text":" options:**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This shows","reasoning_details":[{"type":"reasoning.text","text":" This shows","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a deeper","reasoning_details":[{"type":"reasoning.text","text":" a deeper","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" understanding and","reasoning_details":[{"type":"reasoning.text","text":" understanding and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" gives the","reasoning_details":[{"type":"reasoning.text","text":" gives the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user more","reasoning_details":[{"type":"reasoning.text","text":" user more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tools.\n","reasoning_details":[{"type":"reasoning.text","text":" tools.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Tudo","reasoning_details":[{"type":"reasoning.text","text":"Tudo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" bem?","reasoning_details":[{"type":"reasoning.text","text":" bem?","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"** (","reasoning_details":[{"type":"reasoning.text","text":"** (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"too","reasoning_details":[{"type":"reasoning.text","text":"too","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-d","reasoning_details":[{"type":"reasoning.text","text":"-d","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"oo b","reasoning_details":[{"type":"reasoning.text","text":"oo b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"eng)","reasoning_details":[{"type":"reasoning.text","text":"eng)","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" - \"","reasoning_details":[{"type":"reasoning.text","text":" - \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"How's","reasoning_details":[{"type":"reasoning.text","text":"How's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it going","reasoning_details":[{"type":"reasoning.text","text":" it going","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\" or","reasoning_details":[{"type":"reasoning.text","text":"?\" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Is","reasoning_details":[{"type":"reasoning.text","text":" \"Is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" everything well","reasoning_details":[{"type":"reasoning.text","text":" everything well","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\" I","reasoning_details":[{"type":"reasoning.text","text":"?\" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should mention","reasoning_details":[{"type":"reasoning.text","text":" should mention","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it's","reasoning_details":[{"type":"reasoning.text","text":" it's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" often used","reasoning_details":[{"type":"reasoning.text","text":" often used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a greeting","reasoning_details":[{"type":"reasoning.text","text":" a greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" itself.\n","reasoning_details":[{"type":"reasoning.text","text":" itself.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"E a","reasoning_details":[{"type":"reasoning.text","text":"E a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"í?","reasoning_details":[{"type":"reasoning.text","text":"í?","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"** (","reasoning_details":[{"type":"reasoning.text","text":"** (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ee ah","reasoning_details":[{"type":"reasoning.text","text":"ee ah","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-ee","reasoning_details":[{"type":"reasoning.text","text":"-ee","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":") -","reasoning_details":[{"type":"reasoning.text","text":") -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"What","reasoning_details":[{"type":"reasoning.text","text":" \"What","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s up","reasoning_details":[{"type":"reasoning.text","text":"'s up","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\" I","reasoning_details":[{"type":"reasoning.text","text":"?\" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should specify","reasoning_details":[{"type":"reasoning.text","text":" should specify","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this is","reasoning_details":[{"type":"reasoning.text","text":" this is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very informal","reasoning_details":[{"type":"reasoning.text","text":" very informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and mostly","reasoning_details":[{"type":"reasoning.text","text":" and mostly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazilian","reasoning_details":[{"type":"reasoning.text","text":" Brazilian","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n ","reasoning_details":[{"type":"reasoning.text","text":".\n\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **Create","reasoning_details":[{"type":"reasoning.text","text":" **Create","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a summary","reasoning_details":[{"type":"reasoning.text","text":" a summary","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/recommend","reasoning_details":[{"type":"reasoning.text","text":"/recommend","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ation:**","reasoning_details":[{"type":"reasoning.text","text":"ation:**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" A simple","reasoning_details":[{"type":"reasoning.text","text":" A simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" concluding sentence","reasoning_details":[{"type":"reasoning.text","text":" concluding sentence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helps tie","reasoning_details":[{"type":"reasoning.text","text":" helps tie","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it all","reasoning_details":[{"type":"reasoning.text","text":" it all","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" together.","reasoning_details":[{"type":"reasoning.text","text":" together.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Something like","reasoning_details":[{"type":"reasoning.text","text":" Something like","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":": \"","reasoning_details":[{"type":"reasoning.text","text":": \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"For a","reasoning_details":[{"type":"reasoning.text","text":"For a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple and","reasoning_details":[{"type":"reasoning.text","text":" simple and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universally","reasoning_details":[{"type":"reasoning.text","text":" universally","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" understood","reasoning_details":[{"type":"reasoning.text","text":" understood","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" 'hi","reasoning_details":[{"type":"reasoning.text","text":" 'hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"', **","reasoning_details":[{"type":"reasoning.text","text":"', **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á!","reasoning_details":[{"type":"reasoning.text","text":"á!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"** is","reasoning_details":[{"type":"reasoning.text","text":"** is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" your best","reasoning_details":[{"type":"reasoning.text","text":" your best","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" bet.\"\n\n","reasoning_details":[{"type":"reasoning.text","text":" bet.\"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6.","reasoning_details":[{"type":"reasoning.text","text":"6.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Review and","reasoning_details":[{"type":"reasoning.text","text":"Review and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" refine:**","reasoning_details":[{"type":"reasoning.text","text":" refine:**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Read through","reasoning_details":[{"type":"reasoning.text","text":" Read through","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the drafted","reasoning_details":[{"type":"reasoning.text","text":" the drafted","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response.","reasoning_details":[{"type":"reasoning.text","text":" response.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Is it","reasoning_details":[{"type":"reasoning.text","text":" Is it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clear?","reasoning_details":[{"type":"reasoning.text","text":" clear?","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Is it","reasoning_details":[{"type":"reasoning.text","text":" Is it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" accurate?","reasoning_details":[{"type":"reasoning.text","text":" accurate?","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Is the","reasoning_details":[{"type":"reasoning.text","text":" Is the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formatting easy","reasoning_details":[{"type":"reasoning.text","text":" formatting easy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to read","reasoning_details":[{"type":"reasoning.text","text":" to read","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\n\n","reasoning_details":[{"type":"reasoning.text","text":"?\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Using","reasoning_details":[{"type":"reasoning.text","text":" Using","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" bold for","reasoning_details":[{"type":"reasoning.text","text":" bold for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the Portuguese","reasoning_details":[{"type":"reasoning.text","text":" the Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" words makes","reasoning_details":[{"type":"reasoning.text","text":" words makes","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" them stand","reasoning_details":[{"type":"reasoning.text","text":" them stand","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" out.\n","reasoning_details":[{"type":"reasoning.text","text":" out.\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Adding","reasoning_details":[{"type":"reasoning.text","text":" Adding","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.text","text":" simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" phon","reasoning_details":[{"type":"reasoning.text","text":" phon","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"etic pronunciation","reasoning_details":[{"type":"reasoning.text","text":"etic pronunciation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in parentheses","reasoning_details":[{"type":"reasoning.text","text":" in parentheses","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is a","reasoning_details":[{"type":"reasoning.text","text":" is a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" great value","reasoning_details":[{"type":"reasoning.text","text":" great value","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-add for","reasoning_details":[{"type":"reasoning.text","text":"-add for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a language","reasoning_details":[{"type":"reasoning.text","text":" a language","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" question","reasoning_details":[{"type":"reasoning.text","text":" question","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n ","reasoning_details":[{"type":"reasoning.text","text":".\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" * ","reasoning_details":[{"type":"reasoning.text","text":" * ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The explanations","reasoning_details":[{"type":"reasoning.text","text":" The explanations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" regional differences","reasoning_details":[{"type":"reasoning.text","text":" regional differences","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (Brazil","reasoning_details":[{"type":"reasoning.text","text":" (Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" vs.","reasoning_details":[{"type":"reasoning.text","text":" vs.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal)","reasoning_details":[{"type":"reasoning.text","text":" Portugal)","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and form","reasoning_details":[{"type":"reasoning.text","text":" and form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ality levels","reasoning_details":[{"type":"reasoning.text","text":"ality levels","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are key","reasoning_details":[{"type":"reasoning.text","text":" are key","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" structure flows","reasoning_details":[{"type":"reasoning.text","text":" structure flows","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" logically from","reasoning_details":[{"type":"reasoning.text","text":" logically from","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the most","reasoning_details":[{"type":"reasoning.text","text":" the most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct answer","reasoning_details":[{"type":"reasoning.text","text":" direct answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to more","reasoning_details":[{"type":"reasoning.text","text":" to more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" nuanced options","reasoning_details":[{"type":"reasoning.text","text":" nuanced options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n ","reasoning_details":[{"type":"reasoning.text","text":".\n\n ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The draft","reasoning_details":[{"type":"reasoning.text","text":" The draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" looks good","reasoning_details":[{"type":"reasoning.text","text":" looks good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". It","reasoning_details":[{"type":"reasoning.text","text":". It","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s comprehensive","reasoning_details":[{"type":"reasoning.text","text":"'s comprehensive","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but not","reasoning_details":[{"type":"reasoning.text","text":" but not","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" overwhelming.","reasoning_details":[{"type":"reasoning.text","text":" overwhelming.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" It answers","reasoning_details":[{"type":"reasoning.text","text":" It answers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the user","reasoning_details":[{"type":"reasoning.text","text":" the user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s question","reasoning_details":[{"type":"reasoning.text","text":"'s question","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" directly and","reasoning_details":[{"type":"reasoning.text","text":" directly and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provides","reasoning_details":[{"type":"reasoning.text","text":" provides","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" relevant context","reasoning_details":[{"type":"reasoning.text","text":" relevant context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":". The","reasoning_details":[{"type":"reasoning.text","text":". The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" final version","reasoning_details":[{"type":"reasoning.text","text":" final version","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ready.","reasoning_details":[{"type":"reasoning.text","text":" ready.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Olá","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"!\n\nHere","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" are the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" most common","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" ways to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" say \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"hi\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" in Portuguese","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":", depending","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" on the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" situation and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" region:\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"###","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" The Most","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Common &","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Universal\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"* ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"á!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"oh-L","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"AH)\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" This","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" is the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" most","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" direct translation","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" of \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"hello\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" and is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" used everywhere","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" both Portugal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" and Brazil","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":". It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"'s safe","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" use in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" any situation","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":", formal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" or informal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":".\n\n###","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Informal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" &","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Friendly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" (especially","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" in Brazil","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":")\n\n*","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Oi!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"oy)\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" This","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" is extremely","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" common in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Brazil and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" is like","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" a friendly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" \"hey","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"\" or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" \"hi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"\".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" It's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" less","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" common in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Portugal,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" where it","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" can sound","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" a bit","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" too casual","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" even slightly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" abrupt","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" depending on","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" the context","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":".\n\n###","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Time-of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-Day G","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"reetings (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Very Common","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" &","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Polite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":")\n\nThese","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" are used","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" just","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" like in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" English and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" are a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" great way","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" to greet","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" someone.\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"* ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **B","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"om dia","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"!**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" (b","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"ong DE","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"E-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"ah)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" - Good","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" morning (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"used until","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" around noon","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":")\n*","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Boa","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" tarde!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"boh","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"ah TAR","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-d","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"jee)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" - Good","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" afternoon (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"from noon","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" until sunset","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":")\n*","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Boa","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" noite!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"boh","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-ah","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" NOY","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-tche","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"e)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" - Good","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" evening /","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Good night","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" (used","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" after dark","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":")\n\n###","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Other Casual","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" G","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"reetings\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"* ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **T","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"udo bem","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"?**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" (TO","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"O-d","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"oo b","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"eng)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" - Liter","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"ally \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Everything","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" well?\",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" it means","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" \"How","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" you?\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" and is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" very often","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" used as","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" a greeting","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" itself,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" like \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Hey,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" how's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" it going","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"?\"\n*","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"E a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"í?","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"ee ah","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"-EE","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":") -","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" \"What","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"'s up","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"?\" This","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" is very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" informal and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" mostly used","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" in Brazil","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":".\n\nSo","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":", for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" a simple","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" and universally","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" understood \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"hi,\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" **Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"á!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"** is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" your best","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" choice","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324074-1zCKPpJMYk9TxRlHdbd9","object":"chat.completion.chunk","created":1773324074,"model":"z-ai/glm-4.6","provider":"DeepInfra","choices":[],"usage":{"prompt_tokens":16,"completion_tokens":1266,"total_tokens":1282,"cost":0.0022069199999944,"is_byok":false,"prompt_tokens_details":{"cached_tokens":8,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0022069199999944,"upstream_inference_prompt_cost":0.0000040799999944,"upstream_inference_completions_cost":0.00220284},"completion_tokens_details":{"reasoning_tokens":986,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 699.561417ms diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool.yaml deleted file mode 100644 index eab6d2a8a..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 479 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324149-N3s8BG5itSvZMPwWEtM6\",\"object\":\"chat.completion\",\"created\":1773324149,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll check the weather in Florence, Italy for you.\",\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user specified \\\"Florence, Italy\\\" as the location. I should use this exact value for the location parameter.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_cba78c9d494846b6a2f483e5\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence,Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user specified \\\"Florence, Italy\\\" as the location. I should use this exact value for the location parameter.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":173,\"completion_tokens\":74,\"total_tokens\":247,\"cost\":0.00023947,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00023947,\"upstream_inference_prompt_cost\":0.00007667,\"upstream_inference_completions_cost\":0.0001628},\"completion_tokens_details\":{\"reasoning_tokens\":48,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.4189585s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1117 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"call_cba78c9d494846b6a2f483e5","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user specified \"Florence, Italy\" as the location. I should use this exact value for the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_cba78c9d494846b6a2f483e5","role":"tool"}],"model":"z-ai/glm-4.6","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324152-TSI9nG10XvbpmMQcPXCz\",\"object\":\"chat.completion\",\"created\":1773324152,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently 40°C (104°F). That's quite hot! Make sure to stay hydrated and seek shade if you're out and about.\",\"refusal\":null,\"reasoning\":\"The weather function returned a simple result of \\\"40 C\\\" which indicates it's 40 degrees Celsius in Florence, Italy. This is quite hot weather. I should provide this information to the user in a clear and helpful way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned a simple result of \\\"40 C\\\" which indicates it's 40 degrees Celsius in Florence, Italy. This is quite hot weather. I should provide this information to the user in a clear and helpful way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":253,\"completion_tokens\":83,\"total_tokens\":336,\"cost\":0.00021395,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":245,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00021395,\"upstream_inference_prompt_cost\":0.00003135,\"upstream_inference_completions_cost\":0.0001826},\"completion_tokens_details\":{\"reasoning_tokens\":46,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 3.273252709s diff --git a/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool_streaming.yaml deleted file mode 100644 index 79fc85686..000000000 --- a/providertests/testdata/TestOpenRouterCommon/glm-4.6/tool_streaming.yaml +++ /dev/null @@ -1,319 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 533 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-4.6","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" access","reasoning_details":[{"type":"reasoning.text","text":" access","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" requires","reasoning_details":[{"type":"reasoning.text","text":" requires","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" has","reasoning_details":[{"type":"reasoning.text","text":" has","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flo","reasoning_details":[{"type":"reasoning.text","text":"Flo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"rence","reasoning_details":[{"type":"reasoning.text","text":"rence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.text","text":"Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" exactly","reasoning_details":[{"type":"reasoning.text","text":" exactly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specific","reasoning_details":[{"type":"reasoning.text","text":" specific","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" city","reasoning_details":[{"type":"reasoning.text","text":" city","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" country","reasoning_details":[{"type":"reasoning.text","text":" country","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" combination","reasoning_details":[{"type":"reasoning.text","text":" combination","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" check","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_09a987f7a0bc44488027c603","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324156-sWc0TpyxPKNEWgVvpeXq","object":"chat.completion.chunk","created":1773324156,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":173,"completion_tokens":82,"total_tokens":255,"cost":0.00020031,"is_byok":false,"prompt_tokens_details":{"cached_tokens":171,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00020031,"upstream_inference_prompt_cost":0.00001991,"upstream_inference_completions_cost":0.0001804},"completion_tokens_details":{"reasoning_tokens":56,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.381694708s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1214 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"call_09a987f7a0bc44488027c603","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking for weather information for Florence, Italy. I have access to a weather function that requires a location parameter. The user has provided \"Florence,Italy\" as the location. I should use this exactly as provided since it''s a specific city and country combination.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_09a987f7a0bc44488027c603","role":"tool"}],"model":"z-ai/glm-4.6","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" temperature","reasoning_details":[{"type":"reasoning.text","text":" temperature","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.text","text":"°C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"),","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324159-zugvKZ6ejZK2AjypJXKY","object":"chat.completion.chunk","created":1773324159,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":260,"completion_tokens":55,"total_tokens":315,"cost":0.00018832,"is_byok":false,"prompt_tokens_details":{"cached_tokens":172,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00018832,"upstream_inference_prompt_cost":0.00006732,"upstream_inference_completions_cost":0.000121},"completion_tokens_details":{"reasoning_tokens":33,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.741718916s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml new file mode 100644 index 000000000..de820af91 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 846 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945454-bGfSsPA1tWkfUqy0muzm\",\"object\":\"chat.completion\",\"created\":1773945454,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"Sure! Let me add and multiply 2 and 3 for you at the same time.\",\"refusal\":null,\"reasoning\":\"The user wants me to both add and multiply 2 and 3. I'll make both calls simultaneously.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_869844dd6bf44785b9ee4334\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_d6f1cb4244c94fb88e91ae4f\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to both add and multiply 2 and 3. I'll make both calls simultaneously.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":279,\"completion_tokens\":73,\"total_tokens\":352,\"cost\":0.000469184,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00058648,\"upstream_inference_prompt_cost\":0.00029448,\"upstream_inference_completions_cost\":0.000292},\"completion_tokens_details\":{\"reasoning_tokens\":22,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.925086125s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1522 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"Sure! Let me add and multiply 2 and 3 for you at the same time.","tool_calls":[{"id":"call_869844dd6bf44785b9ee4334","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_d6f1cb4244c94fb88e91ae4f","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to both add and multiply 2 and 3. I''ll make both calls simultaneously.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_869844dd6bf44785b9ee4334","role":"tool"},{"content":"6","tool_call_id":"call_d6f1cb4244c94fb88e91ae4f","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945457-O2s9toIHS9WW6qPT3Mjj\",\"object\":\"chat.completion\",\"created\":1773945457,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results:\\n\\n- **Addition:** 2 + 3 = **5**\\n- **Multiplication:** 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":360,\"completion_tokens\":63,\"total_tokens\":423,\"cost\":0.000333696,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":278,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00041712,\"upstream_inference_prompt_cost\":0.00016512,\"upstream_inference_completions_cost\":0.000252},\"completion_tokens_details\":{\"reasoning_tokens\":28,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.125586208s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml new file mode 100644 index 000000000..bc8ed94d7 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml @@ -0,0 +1,171 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 883 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simultaneously","reasoning_details":[{"type":"reasoning.text","text":" simultaneously","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they","reasoning_details":[{"type":"reasoning.text","text":" they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" right","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" away","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_01a3b98ceccc42ff83f9cebd","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_0be384879b524949a5cc4d74","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":275,"completion_tokens":73,"total_tokens":348,"cost":0.0003056,"is_byok":false,"prompt_tokens_details":{"cached_tokens":250,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000382,"upstream_inference_prompt_cost":0.00009,"upstream_inference_completions_cost":0.000292},"completion_tokens_details":{"reasoning_tokens":24,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 3.125579583s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1567 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"Sure! I''ll add and multiply 2 and 3 for you right away.","tool_calls":[{"id":"call_01a3b98ceccc42ff83f9cebd","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_0be384879b524949a5cc4d74","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to add and multiply 2 and 3. I''ll make both calls simultaneously since they are independent.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_01a3b98ceccc42ff83f9cebd","role":"tool"},{"content":"6","tool_call_id":"call_0be384879b524949a5cc4d74","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"Both\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"Both\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" results\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" results\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" are\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" are\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" back\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" back\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Let\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Let\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" me\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" me\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" present\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" present\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" them\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" them\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" clearly\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" clearly\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Here\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" are\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" the\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" results\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":\\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"-\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Add\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"ition\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"2\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" +\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"3\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" =\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"5\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"-\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Multip\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"lication\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"2\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" ×\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"3\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" =\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"6\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Let\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" me\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" know\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" need\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" anything\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" else\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":355,\"completion_tokens\":57,\"total_tokens\":412,\"cost\":0.000312768,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":274,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00039096,\"upstream_inference_prompt_cost\":0.00016296,\"upstream_inference_completions_cost\":0.000228},\"completion_tokens_details\":{\"reasoning_tokens\":11,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.430991958s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml b/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml new file mode 100644 index 000000000..b8d89f626 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 191 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945441-rmYxEaMamyQYZcvTx0FA\",\"object\":\"chat.completion\",\"created\":1773945441,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi!\",\"refusal\":null,\"reasoning\":\"1. **Identify the language**: Portuguese.\\n2. **Identify the intent**: Say \\\"hi\\\".\\n3. **Translate \\\"hi\\\" to Portuguese**: \\\"Oi\\\" is the most common and direct translation for \\\"hi\\\". \\\"Olá\\\" is also very common and translates to \\\"hello\\\".\\n4. **Select the best option**: \\\"Oi\\\" fits the casualness of \\\"hi\\\" perfectly.\\n5. **Output the result**: Oi!\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"1. **Identify the language**: Portuguese.\\n2. **Identify the intent**: Say \\\"hi\\\".\\n3. **Translate \\\"hi\\\" to Portuguese**: \\\"Oi\\\" is the most common and direct translation for \\\"hi\\\". \\\"Olá\\\" is also very common and translates to \\\"hello\\\".\\n4. **Select the best option**: \\\"Oi\\\" fits the casualness of \\\"hi\\\" perfectly.\\n5. **Output the result**: Oi!\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":15,\"completion_tokens\":100,\"total_tokens\":115,\"cost\":0.000331328,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":4,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00041416,\"upstream_inference_prompt_cost\":0.00001416,\"upstream_inference_completions_cost\":0.0004},\"completion_tokens_details\":{\"reasoning_tokens\":96,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.758985083s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml new file mode 100644 index 000000000..b96492b5e --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml @@ -0,0 +1,562 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 245 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"An","reasoning_details":[{"type":"reasoning.text","text":"An","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"alyze","reasoning_details":[{"type":"reasoning.text","text":"alyze","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Request","reasoning_details":[{"type":"reasoning.text","text":" Request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Task","reasoning_details":[{"type":"reasoning.text","text":" Task","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Say","reasoning_details":[{"type":"reasoning.text","text":" Say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"g","reasoning_details":[{"type":"reasoning.text","text":"g","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"reet","reasoning_details":[{"type":"reasoning.text","text":"reet","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").\n","reasoning_details":[{"type":"reasoning.text","text":").\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Language","reasoning_details":[{"type":"reasoning.text","text":" Language","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"D","reasoning_details":[{"type":"reasoning.text","text":"D","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"etermine","reasoning_details":[{"type":"reasoning.text","text":"etermine","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" appropriate","reasoning_details":[{"type":"reasoning.text","text":" appropriate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Hi","reasoning_details":[{"type":"reasoning.text","text":"Hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translates","reasoning_details":[{"type":"reasoning.text","text":" translates","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Hello","reasoning_details":[{"type":"reasoning.text","text":"Hello","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translates","reasoning_details":[{"type":"reasoning.text","text":" translates","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Both","reasoning_details":[{"type":"reasoning.text","text":" Both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" correct","reasoning_details":[{"type":"reasoning.text","text":" correct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" equivalent","reasoning_details":[{"type":"reasoning.text","text":" equivalent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" casual","reasoning_details":[{"type":"reasoning.text","text":" casual","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".\n\n","reasoning_details":[{"type":"reasoning.text","text":"\".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Form","reasoning_details":[{"type":"reasoning.text","text":"Form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ulate","reasoning_details":[{"type":"reasoning.text","text":"ulate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.text","text":" response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Provide","reasoning_details":[{"type":"reasoning.text","text":" Provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (\"","reasoning_details":[{"type":"reasoning.text","text":" (\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\").\n","reasoning_details":[{"type":"reasoning.text","text":"\").\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Optional","reasoning_details":[{"type":"reasoning.text","text":"Optional","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Add","reasoning_details":[{"type":"reasoning.text","text":" Add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" brief","reasoning_details":[{"type":"reasoning.text","text":" brief","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" explanation","reasoning_details":[{"type":"reasoning.text","text":" explanation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" extra","reasoning_details":[{"type":"reasoning.text","text":" extra","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" polite","reasoning_details":[{"type":"reasoning.text","text":" polite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/help","reasoning_details":[{"type":"reasoning.text","text":"/help","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ful","reasoning_details":[{"type":"reasoning.text","text":"ful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"4","reasoning_details":[{"type":"reasoning.text","text":"4","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Draft","reasoning_details":[{"type":"reasoning.text","text":"Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ing","reasoning_details":[{"type":"reasoning.text","text":"ing","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.text","text":" response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Simple","reasoning_details":[{"type":"reasoning.text","text":"Simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"st","reasoning_details":[{"type":"reasoning.text","text":"st","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" accurate","reasoning_details":[{"type":"reasoning.text","text":" accurate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\")\n","reasoning_details":[{"type":"reasoning.text","text":"\")\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Also","reasoning_details":[{"type":"reasoning.text","text":"Also","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" good","reasoning_details":[{"type":"reasoning.text","text":" good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")\n\n","reasoning_details":[{"type":"reasoning.text","text":")\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Final","reasoning_details":[{"type":"reasoning.text","text":"Final","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Selection","reasoning_details":[{"type":"reasoning.text","text":" Selection","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Just","reasoning_details":[{"type":"reasoning.text","text":" Just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" perfect","reasoning_details":[{"type":"reasoning.text","text":" perfect","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" go","reasoning_details":[{"type":"reasoning.text","text":" go","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" perfectly","reasoning_details":[{"type":"reasoning.text","text":" perfectly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" matches","reasoning_details":[{"type":"reasoning.text","text":" matches","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" casual","reasoning_details":[{"type":"reasoning.text","text":" casual","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ness","reasoning_details":[{"type":"reasoning.text","text":"ness","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.text","text":"\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Adding","reasoning_details":[{"type":"reasoning.text","text":" Adding","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" an","reasoning_details":[{"type":"reasoning.text","text":" an","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" nice","reasoning_details":[{"type":"reasoning.text","text":" nice","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" touch","reasoning_details":[{"type":"reasoning.text","text":" touch","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Draft","reasoning_details":[{"type":"reasoning.text","text":"Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":*","reasoning_details":[{"type":"reasoning.text","text":":*","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" O","reasoning_details":[{"type":"reasoning.text","text":" O","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"i","reasoning_details":[{"type":"reasoning.text","text":"i","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"or","reasoning_details":[{"type":"reasoning.text","text":"or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Ol","reasoning_details":[{"type":"reasoning.text","text":" Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!)","reasoning_details":[{"type":"reasoning.text","text":"!)","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" \n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" can","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" also","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" say","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"**)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":255,"total_tokens":270,"cost":0.000820416,"is_byok":false,"prompt_tokens_details":{"cached_tokens":13,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00102552,"upstream_inference_prompt_cost":0.00000552,"upstream_inference_completions_cost":0.00102},"completion_tokens_details":{"reasoning_tokens":240,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.771724167s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml new file mode 100644 index 000000000..5490c3dbb --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 483 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945449-sZksq50wfVIXe94WMejJ\",\"object\":\"chat.completion\",\"created\":1773945449,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_3f8ba8d964264042b99c0403\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":173,\"completion_tokens\":33,\"total_tokens\":206,\"cost\":0.000239424,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00029928,\"upstream_inference_prompt_cost\":0.00016728,\"upstream_inference_completions_cost\":0.000132},\"completion_tokens_details\":{\"reasoning_tokens\":19,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.0582665s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 910 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_3f8ba8d964264042b99c0403","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants to know the weather in Florence, Italy. Let me call the weather function.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_3f8ba8d964264042b99c0403","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945451-gwPNpv4Y8nMTdoaUTRjx\",\"object\":\"chat.completion\",\"created\":1773945451,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in **Florence, Italy** is quite scorching at **40°C (104°F)**! \U0001F321️\\n\\nIt's extremely hot, so if you're planning to be outdoors, be sure to:\\n\\n- \U0001F4A7 Stay hydrated\\n- \U0001F9F4 Wear sunscreen\\n- \U0001F9E2 Wear a hat and light clothing\\n- \U0001F333 Seek shade when possible\\n\\nWould you like to know the weather for any other locations?\",\"refusal\":null,\"reasoning\":\"The weather function returned 40°C for Florence, Italy. That's quite hot! Let me present this to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned 40°C for Florence, Italy. That's quite hot! Let me present this to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":212,\"completion_tokens\":119,\"total_tokens\":331,\"cost\":0.000452224,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":172,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00056528,\"upstream_inference_prompt_cost\":0.00008928,\"upstream_inference_completions_cost\":0.000476},\"completion_tokens_details\":{\"reasoning_tokens\":25,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.225640375s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml new file mode 100644 index 000000000..06edc8ebe --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml @@ -0,0 +1,133 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 537 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" know","reasoning_details":[{"type":"reasoning.text","text":" know","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flo","reasoning_details":[{"type":"reasoning.text","text":"Flo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"rence","reasoning_details":[{"type":"reasoning.text","text":"rence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.text","text":"Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_4869f96c06ba414abebb0105","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":173,"completion_tokens":43,"total_tokens":216,"cost":0.000172352,"is_byok":false,"prompt_tokens_details":{"cached_tokens":171,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00021544,"upstream_inference_prompt_cost":0.00004344,"upstream_inference_completions_cost":0.000172},"completion_tokens_details":{"reasoning_tokens":29,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 889.738542ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 998 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_4869f96c06ba414abebb0105","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to know the weather in Florence, Italy. I''ll call the weather function with \"Florence,Italy\" as the location.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_4869f96c06ba414abebb0105","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"The\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" function\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" function\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" returned\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" returned\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \\\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" \\\"\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"40\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"40\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" C\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" C\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"\\\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\\"\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" which\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" which\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" is\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" is\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" \",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"40\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"40\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" degrees\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" degrees\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Celsius\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Celsius\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" That\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" That\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"'s\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"'s\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" very\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" very\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" hot\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" hot\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"!\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"!\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Let\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Let\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" me\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" me\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" present\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" present\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" this\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" this\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" to\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" to\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" the\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" the\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" user\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" user\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"The\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" current\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" weather\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" in\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Flo\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"rence\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Italy\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"40\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°C\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" (\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"104\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°F\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\").\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" That\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"'s\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" extremely\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hot\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"☀\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"️\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F975\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Be\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" stay\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hydrated\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" wear\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sunscreen\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" and\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" try\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" avoid\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" prolonged\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" exposure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" the\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sun\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"'re\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" out\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" and\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" about\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Let\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" me\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" know\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" need\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" anything\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" else\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":221,\"completion_tokens\":94,\"total_tokens\":315,\"cost\":0.000380864,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":172,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00047608,\"upstream_inference_prompt_cost\":0.00010008,\"upstream_inference_completions_cost\":0.000376},\"completion_tokens_details\":{\"reasoning_tokens\":27,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.377012959s diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool.yaml deleted file mode 100644 index 5baa4f2cd..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 853 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323924-57QbnghbXm2GvzEpqDiv\",\"object\":\"chat.completion\",\"created\":1773323924,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Calculating sum and product**\\n\\nI need to respond to the user's request to add and multiply the numbers 2 and 3. The instructions clearly state that I should use both operations simultaneously, so I’ll utilize the multi_tool_use.parallel function. I’ll run the add tool with parameters {a: 2, b: 3} and the multiply tool with the same parameters. Once I get the results, I can present them concisely, saying “Sum: 5; Product: 6.”**Using parallel functions**\\n\\nI need to follow the instruction to always use both addition and multiplication at the same time. So, I'll use the parallel tool to ensure I'm running both operations together. It’s essential to stick to this guideline to provide what’s needed efficiently. Let me get that working correctly right away! This way, I can deliver the accurate results for the user's request seamlessly.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_hxZ5lngdot9y8AfQa3spor2J\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_FfAnNULynr6w23E2ptBJNI0F\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Calculating sum and product**\\n\\nI need to respond to the user's request to add and multiply the numbers 2 and 3. The instructions clearly state that I should use both operations simultaneously, so I’ll utilize the multi_tool_use.parallel function. I’ll run the add tool with parameters {a: 2, b: 3} and the multiply tool with the same parameters. Once I get the results, I can present them concisely, saying “Sum: 5; Product: 6.”**Using parallel functions**\\n\\nI need to follow the instruction to always use both addition and multiplication at the same time. So, I'll use the parallel tool to ensure I'm running both operations together. It’s essential to stick to this guideline to provide what’s needed efficiently. Let me get that working correctly right away! This way, I can deliver the accurate results for the user's request seamlessly.\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpssagkg5555BU8eWgG1B8tAi6UUzyAFkqDnJ-cnFqHhRmc2bzWuxec_8gFNw9WN3zAMM3jh1X_2iQgKVJ0JT1DMhGpYN31kr_kyzX6dAWM6OPkg4vLu2c_6j949t0KIvhMbt1ZWLp0Ny9rm8Fh4YZ-H3b38WK-Q_F5NITjM4TyaOA-JJWoWmYboD_kC4jmeyh47liqSK5eqomZEnuqlsr-pP4OSnuzotBO5mwD0odd1W7fc7iYvFBfXhCu1jirCoipPRXHX-aTXpH5jy8B7SAekt3qTcvgXZUGjotrYFcP971vV1BQRgGbdgN6yM83qcpAHJQO8tdLu6EkZvXfnukmTPw52JTRihsRnHPkUxFMsl742P7xs8A73lhCFq-XUOZzxZmTiMmAq0PS3EZuePAEYGq3rq0fJap9jIQB2KKcNxUNP-TT2yylBlByi1Ac1oSGdwD7dIwtX9C3Z0XHGeNv3cnYwcBzQHy2ko0uPmeD6p11rSZloZvxL-JzI7BYcGdFD_h946Dfwsfx2GLLRI3jzfF5n1NTzrUKulUyTusiESH0l6Gzu45xnKfa4PGBMV-kHEikv54yFl1CYUcciiva03E3IhsuLg0hWuT9mqXOJw30LU5E89B4KE1_n6n93eFo24gy3Y0Az90J3BLgXmlkwOsKlfSFrXwcODKEwoGTRVKS6qsLlBq7HvM-kDvfrJP64T2cUaPPD-5JOaOTeCChXTWDhOLWurvEcA3LIhL0ltZtaCW7OQwdCrBt1cSkvRqytAmN6QsAQYnrgrXaN-vm3ElKQPgLDcar03GBJhG1dL1-kLXp6INGfpDXsyMVV8hj0wYEEcQdOOQ4qAWRAA1c535WZNwx2EYCMKXX3Mx-H-xh6PEdnyAXgNMpWfUT0QHbEsUAd18CtkDsvz54kUyIps-msInHxQca0BwFN5ly8i0NCO51BlgMffx-LHbgfVkUvNF36kHiB0ueu-16KcP1d4u0aXH3IPJOBlI2A6s0EpUXO3zUFqDPd4T5j0X6j_cO4qopFWUd4KOZQyHoqQUcc0n1HuTIpP_kg0IqSt4WKagevkrFA0_kA3hWSnkgeWsurV412o6pUUffPR6fQ1GnvD1ZzNWARwZViWkzxahrfNIxfbwWnjVn27j3PLuqgExNGn9zfTNF1o3veIR_9OlUGet5f7sHBHRrw9Erw9GZtSoUs6OzlAYjOe6F03FxbNSz858FhjuChK8Qfhicy2jBmqTQ864bofMqLjMKd49tM19rLffSZkYSuP4sO_RNX1y5sah3ln09UkHucyu06UXI7sA3qcIobBQ_QgEBKn-_Z84tDH2F6K8lUOl49eV1C3Y3kquOI1jpD9SICXB4dhWsDSyNeMC24uiOOrf6de7zIBIRxw8H_Z8S9TrWJu8H7bc-ndkJHpMIc9Ywjz14HRjP-gBLyRnQxoawVZ68WWiL1Gj_6I_XLNw4BPvUYa2gBD0uToOwFCef3j_bWaZ6PMHo1qtIflQnxbws1UX4_mUh54CBq1damKvymlWJkqzmQggoD7JH-ym8fPoDCdDei8YfN4JVvLW16IuWJz_x_mAP5NcgPM8-P8caClDxQB1WHs4tKSURliL7-n6QKew_yAeOrav2PkscUHIOS0L8LEswSDtd2n92RfGbe9rSh7ct6s4bi9u1O2H5M3X0foTNtiamkFGii4N4jnQUxwF0-7xtdFUXQXOoiq-PVh3DFTy2BF75c6RjUeO1vBsZ6HE-HE_jQVnK7cefq6vw--ot4c0-QTY239_CUm5nSMZfzQHuaWs6NqCtkx9fWzstpFrZSr-hxHMUiaK7jlT9fO0GN-y6FuXL8D2SINANFs1ViSioYVskb5jgCOF_rvjHwRAx4uaJNP0ZevLdTCOzYIKVu67U2paHm7yEc6_YSVEGPmCErbDNnHU66PHoGc9uCPjpZgmNlwKVDS-tWQDcdfxpECy_bNmI2djLM6sanc2Xh-7S9fuP_jI9ShpGQLILIGIqItlIBxJLXn2Qm8IZpaMKQYdFLbA9D6NlGKSlIy4sxu073LcXrUVmIxTlfliUAuGP0E9I4xPXfmG8uK9628ysvvEMZzZIkyNPtCMsvbFWbmCjB5HAHgHCCsgP0NJaei44uFhmyYRhEvogsODUgv0eYS1N57bXKhVe0Gi6XATtk8XFGPmGJUNDS0yJ60VNV_xUr3vSdT5_Hl5DQCizA3WtVXIVs3gYJIA1CJQEfP8nvlN2JrODCOz\",\"format\":\"openai-responses-v1\",\"id\":\"rs_06113a4c35b40b110169b2c694f7608195bbc8eb5427d84429\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":113,\"completion_tokens\":286,\"total_tokens\":399,\"cost\":0.00300125,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00300125,\"upstream_inference_prompt_cost\":0.00014125,\"upstream_inference_completions_cost\":0.00286},\"completion_tokens_details\":{\"reasoning_tokens\":192,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 525.318167ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 3695 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_hxZ5lngdot9y8AfQa3spor2J","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_FfAnNULynr6w23E2ptBJNI0F","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"gAAAAABpssagkg5555BU8eWgG1B8tAi6UUzyAFkqDnJ-cnFqHhRmc2bzWuxec_8gFNw9WN3zAMM3jh1X_2iQgKVJ0JT1DMhGpYN31kr_kyzX6dAWM6OPkg4vLu2c_6j949t0KIvhMbt1ZWLp0Ny9rm8Fh4YZ-H3b38WK-Q_F5NITjM4TyaOA-JJWoWmYboD_kC4jmeyh47liqSK5eqomZEnuqlsr-pP4OSnuzotBO5mwD0odd1W7fc7iYvFBfXhCu1jirCoipPRXHX-aTXpH5jy8B7SAekt3qTcvgXZUGjotrYFcP971vV1BQRgGbdgN6yM83qcpAHJQO8tdLu6EkZvXfnukmTPw52JTRihsRnHPkUxFMsl742P7xs8A73lhCFq-XUOZzxZmTiMmAq0PS3EZuePAEYGq3rq0fJap9jIQB2KKcNxUNP-TT2yylBlByi1Ac1oSGdwD7dIwtX9C3Z0XHGeNv3cnYwcBzQHy2ko0uPmeD6p11rSZloZvxL-JzI7BYcGdFD_h946Dfwsfx2GLLRI3jzfF5n1NTzrUKulUyTusiESH0l6Gzu45xnKfa4PGBMV-kHEikv54yFl1CYUcciiva03E3IhsuLg0hWuT9mqXOJw30LU5E89B4KE1_n6n93eFo24gy3Y0Az90J3BLgXmlkwOsKlfSFrXwcODKEwoGTRVKS6qsLlBq7HvM-kDvfrJP64T2cUaPPD-5JOaOTeCChXTWDhOLWurvEcA3LIhL0ltZtaCW7OQwdCrBt1cSkvRqytAmN6QsAQYnrgrXaN-vm3ElKQPgLDcar03GBJhG1dL1-kLXp6INGfpDXsyMVV8hj0wYEEcQdOOQ4qAWRAA1c535WZNwx2EYCMKXX3Mx-H-xh6PEdnyAXgNMpWfUT0QHbEsUAd18CtkDsvz54kUyIps-msInHxQca0BwFN5ly8i0NCO51BlgMffx-LHbgfVkUvNF36kHiB0ueu-16KcP1d4u0aXH3IPJOBlI2A6s0EpUXO3zUFqDPd4T5j0X6j_cO4qopFWUd4KOZQyHoqQUcc0n1HuTIpP_kg0IqSt4WKagevkrFA0_kA3hWSnkgeWsurV412o6pUUffPR6fQ1GnvD1ZzNWARwZViWkzxahrfNIxfbwWnjVn27j3PLuqgExNGn9zfTNF1o3veIR_9OlUGet5f7sHBHRrw9Erw9GZtSoUs6OzlAYjOe6F03FxbNSz858FhjuChK8Qfhicy2jBmqTQ864bofMqLjMKd49tM19rLffSZkYSuP4sO_RNX1y5sah3ln09UkHucyu06UXI7sA3qcIobBQ_QgEBKn-_Z84tDH2F6K8lUOl49eV1C3Y3kquOI1jpD9SICXB4dhWsDSyNeMC24uiOOrf6de7zIBIRxw8H_Z8S9TrWJu8H7bc-ndkJHpMIc9Ywjz14HRjP-gBLyRnQxoawVZ68WWiL1Gj_6I_XLNw4BPvUYa2gBD0uToOwFCef3j_bWaZ6PMHo1qtIflQnxbws1UX4_mUh54CBq1damKvymlWJkqzmQggoD7JH-ym8fPoDCdDei8YfN4JVvLW16IuWJz_x_mAP5NcgPM8-P8caClDxQB1WHs4tKSURliL7-n6QKew_yAeOrav2PkscUHIOS0L8LEswSDtd2n92RfGbe9rSh7ct6s4bi9u1O2H5M3X0foTNtiamkFGii4N4jnQUxwF0-7xtdFUXQXOoiq-PVh3DFTy2BF75c6RjUeO1vBsZ6HE-HE_jQVnK7cefq6vw--ot4c0-QTY239_CUm5nSMZfzQHuaWs6NqCtkx9fWzstpFrZSr-hxHMUiaK7jlT9fO0GN-y6FuXL8D2SINANFs1ViSioYVskb5jgCOF_rvjHwRAx4uaJNP0ZevLdTCOzYIKVu67U2paHm7yEc6_YSVEGPmCErbDNnHU66PHoGc9uCPjpZgmNlwKVDS-tWQDcdfxpECy_bNmI2djLM6sanc2Xh-7S9fuP_jI9ShpGQLILIGIqItlIBxJLXn2Qm8IZpaMKQYdFLbA9D6NlGKSlIy4sxu073LcXrUVmIxTlfliUAuGP0E9I4xPXfmG8uK9628ysvvEMZzZIkyNPtCMsvbFWbmCjB5HAHgHCCsgP0NJaei44uFhmyYRhEvogsODUgv0eYS1N57bXKhVe0Gi6XATtk8XFGPmGJUNDS0yJ60VNV_xUr3vSdT5_Hl5DQCizA3WtVXIVs3gYJIA1CJQEfP8nvlN2JrODCOz","format":"openai-responses-v1","id":"rs_06113a4c35b40b110169b2c694f7608195bbc8eb5427d84429","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"call_hxZ5lngdot9y8AfQa3spor2J","role":"tool"},{"content":"6","tool_call_id":"call_FfAnNULynr6w23E2ptBJNI0F","role":"tool"}],"model":"openai/gpt-5","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n{\"id\":\"gen-1773323936-i11BOHKBlXfxaR0ey9BE\",\"object\":\"chat.completion\",\"created\":1773323936,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Sum: 5\\nProduct: 6\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":403,\"completion_tokens\":13,\"total_tokens\":416,\"cost\":0.00063375,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00063375,\"upstream_inference_prompt_cost\":0.00050375,\"upstream_inference_completions_cost\":0.00013},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 445.651292ms diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool_streaming.yaml deleted file mode 100644 index 71136e8a0..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/multi_tool_streaming.yaml +++ /dev/null @@ -1,261 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 890 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I'm","reasoning_details":[{"type":"reasoning.summary","summary":"I'm","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" thinking","reasoning_details":[{"type":"reasoning.summary","summary":" thinking","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.summary","summary":" provide","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.summary","summary":" calls","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" structured","reasoning_details":[{"type":"reasoning.summary","summary":" structured","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" manner","reasoning_details":[{"type":"reasoning.summary","summary":" manner","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.summary","summary":" should","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" '","reasoning_details":[{"type":"reasoning.summary","summary":" '","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"comment","reasoning_details":[{"type":"reasoning.summary","summary":"comment","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ary","reasoning_details":[{"type":"reasoning.summary","summary":"ary","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'","reasoning_details":[{"type":"reasoning.summary","summary":"'","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" channel","reasoning_details":[{"type":"reasoning.summary","summary":" channel","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.summary","summary":" calls","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" making","reasoning_details":[{"type":"reasoning.summary","summary":" making","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" sure","reasoning_details":[{"type":"reasoning.summary","summary":" sure","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" keep","reasoning_details":[{"type":"reasoning.summary","summary":" keep","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" everything","reasoning_details":[{"type":"reasoning.summary","summary":" everything","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clear","reasoning_details":[{"type":"reasoning.summary","summary":" clear","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" organized","reasoning_details":[{"type":"reasoning.summary","summary":" organized","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" After","reasoning_details":[{"type":"reasoning.summary","summary":" After","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" receive","reasoning_details":[{"type":"reasoning.summary","summary":" receive","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" responses","reasoning_details":[{"type":"reasoning.summary","summary":" responses","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'll","reasoning_details":[{"type":"reasoning.summary","summary":" I'll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" proceed","reasoning_details":[{"type":"reasoning.summary","summary":" proceed","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" give","reasoning_details":[{"type":"reasoning.summary","summary":" give","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" final","reasoning_details":[{"type":"reasoning.summary","summary":" final","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" output","reasoning_details":[{"type":"reasoning.summary","summary":" output","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" based","reasoning_details":[{"type":"reasoning.summary","summary":" based","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" on","reasoning_details":[{"type":"reasoning.summary","summary":" on","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.summary","summary":" information","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" It","reasoning_details":[{"type":"reasoning.summary","summary":" It","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" seems","reasoning_details":[{"type":"reasoning.summary","summary":" seems","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" straightforward","reasoning_details":[{"type":"reasoning.summary","summary":" straightforward","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.summary","summary":" but","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" want","reasoning_details":[{"type":"reasoning.summary","summary":" want","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ensure","reasoning_details":[{"type":"reasoning.summary","summary":" ensure","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'm","reasoning_details":[{"type":"reasoning.summary","summary":" I'm","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" being","reasoning_details":[{"type":"reasoning.summary","summary":" being","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" thorough","reasoning_details":[{"type":"reasoning.summary","summary":" thorough","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" accurate","reasoning_details":[{"type":"reasoning.summary","summary":" accurate","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" throughout","reasoning_details":[{"type":"reasoning.summary","summary":" throughout","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" process","reasoning_details":[{"type":"reasoning.summary","summary":" process","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let's","reasoning_details":[{"type":"reasoning.summary","summary":" Let's","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" move","reasoning_details":[{"type":"reasoning.summary","summary":" move","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" forward","reasoning_details":[{"type":"reasoning.summary","summary":" forward","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"gAAAAABpssaoFNIlKEiZyENgHTOHPXHq383nE0KXHYhMv4F2lpE6JPq0EpU1UjvxSzZSKN8P4F4pOdkHxMuaarDe8eJ_6yeYfFdLq91dF5YCLVloeBfNHmc7OAvWyW2HdtiiXBKpLMIXG3mykfd2U4HsWrNgwm_Eze4Uv56CBCJjv1JX_ghxrWcqgzf_l2PxApxdqouxqiE0kM1ecEmyOe3dqjcYll2VJ6YnHDKd8ZtLvoFQhk_jJJ5mzHRdJcqKq8MXlSwxZgE08FHOrp8zX8l95WYqhhcsHhr43TlRrY3UlXpy1COfSzK2vtcw3OOpSvODqIsefwNhh_bEmaoVH2gEkGI4sy40WeFGAGI6LmDrhV1sdBNHcK4CO9LHuU6Fs1ikFzHpy__SrG5LGPEQNpeCV94HQQNyFrF1I6FnHm9Bs8yyFnyhUUAU6f-o25ndeE0ac8HL5qnbUc4kOAsLWqAwJrOJGn7IH1zy6bETbAFod6nLDlRmfvVRtJ4kkBdSMB8wTD7ypaD_f-G2OXnoSOpWh5FEUZuq7PgmawI9ZfAFPqCc737lCVVylyMsqmQswolV65_7qZeCYzSTAoJd60-6B3BqHQKSTocIzf-gsiLqBKCcAYImtgfivmu72l_22hvYMQygfdoJ_tDqWo1VNAPSUfOOPsR4O4V1KRUJA7R9H90xye9hONhVcdY1llUU45jmkjjR0jwBSk-s3B--ydlpesOMP5hGctDtTNvtkNeTM_0frrwbCmaSSPXMbRFv0kLsk_iePAVmoS2GOPktA2n0wQ6tcQ62rl29YZa7aRIFErUOnqBYpgZOum1xH_3tVKpG0lqBWrkVr7Zv1VsZohxQyltTwKWZrJ-2gMiYOOCRRYNO_d5KMNqOrRoyiw7_nnZDVeZoT7LKI6GnhjIbjRCMj0KCCQtApwirVulPaZCWynUxzP_Kef3-Jo0IQNoaiL5UXYkv6qcYYBScZlhS5FdKsTuyHlEjzITHVnqVbG1Zgmc7hsHCH0QwS2vkHlCkUM8dB0SvqAb-im0jN9jSsMT2hBXKQ9oZb5YK1paxN2b6Iz8lmRb5x8ZJQCQvu68b4q-jos-BiOqOqMRJIEP0t8joJTvFyM0ay4rPu2c3scKTDxk0tDRFMVpI9FLf7v-fBZdma8vy5uhXI3xzRpv5LwKbbyRycsFHbh-mebe0bZhxke1sMx4vpffFot-uiQKn1WUoGQiDcXviOqloTq07MpjOh8waCJCFdKd-t-1N1pDECCVirElSvGX2-ZzRHlvbX-yS0F6pqdOkcC-SMCi-YdiEA0VwM0wZnNYzoAWQFH37BB_cR6_J-Za1QQP5bh0dj2ljAOeCE06y3d8YS0peEeC2wAdIK4NfUz4xmGmJX3soxcMfLAUb0BDuXJuaLq-MxKfzp28NZZ2wDHMWTGJ_dbe3Rhrlf9tDCnQgiiHuGhDa01JfNJt2PNdzhxD4bsvjGxkeQZoLDSDZ2CE7HBsc_XuNHvg_dhQJr1Zh13oPpNKc_I_yD6-2A6dY-TPDcZFHusHnrMqeWB0BVEIJDyNf6XD_ETO-BEqIQZuTVETJPp5g-HEhW-5IgZJmsRBs4e6UhjA7lvfrr7GoGQFnkYoM84Ryo8fBKNVF3MGGDxhmonVRXbwiBGiB2v8k1BrLagjO-HXFL3vGRAwBVYB0FnytVNnKnTyWe7FsArPsNjh2pExVvrwrYQuwatiKDk6rVFUhZGsgUUjVl4IA5TIw5NXxJb7E107zgHPv4hKvK4I2EeA7ZzsKle7EoS4Dmnj0-H-TNWfZ_r-oHziY2J1U5XiGRCXq1NJ_al7ZNcUe1zwnFFhGXg4qLz78bSuOenjAoFZfG03SLX2dFNEzgW4fMTLbyy7161wxAjiEf01wqL2KfKLD33ql33BeAGdV0U5pjrNmayuwJez6FmJcdxEnkusL5DDMSuBe4PSRicTRWW4RK5ig3nFlziIL5Lcar_Xv_AVMt-xlbosiB7aCzo29-6nNTfUIVgayQYL-x6PBugqtsaM2mn46QS73kaXamrbEkHI9FTL-Tlv-UFAYUkefrwHMEwy8V6RzBJdPC4cGL9YwonBSRRsMQWMOlhLYE1WjNDeaZYLtMJEJXhHGmELamUf-cwOtvWJi715RdWrdJXoXMt6ZhhoGlM7JtURZK5ccLFmk7PswQ0yy2uX-iKYgM9P4XfuYba0ntNhfYJ-Pdj9gxnh0sK7z1JlhEHy-b6E08R3gkse4e0njgXGkX4kpW-cwPkDpFnzaYOUQnkbJywlaoXgeea7vOWj9enGrbxX6K6tdemckUBuu9HTKNQfAXxEAMoM3Yi3l6aRi6w==","format":"openai-responses-v1","id":"rs_0dc8a771bc4d29200169b2c6a26a248195aafcaec10e972cd4","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_FS6r3jejWrnsF9udNRMPiyfM","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_Rlgo1THqC0e9mGnzP18pESCO","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323937-Uf9ExvZNih6kX1J3x2jT","object":"chat.completion.chunk","created":1773323937,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":109,"completion_tokens":306,"total_tokens":415,"cost":0.00319625,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00319625,"upstream_inference_prompt_cost":0.00013625,"upstream_inference_completions_cost":0.00306},"completion_tokens_details":{"reasoning_tokens":192,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 417.723833ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 4305 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_FS6r3jejWrnsF9udNRMPiyfM","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_Rlgo1THqC0e9mGnzP18pESCO","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"openai-responses-v1","index":0,"summary":"I''m thinking that I need to provide both calls in a structured manner. I should use the ''commentary'' channel for the tool calls, making sure to keep everything clear and organized. After I receive the tool responses, I''ll proceed to give a final output based on that information. It seems straightforward, but I want to ensure I''m being thorough and accurate throughout the process! Let''s move forward!","type":"reasoning.summary"},{"data":"gAAAAABpssaoFNIlKEiZyENgHTOHPXHq383nE0KXHYhMv4F2lpE6JPq0EpU1UjvxSzZSKN8P4F4pOdkHxMuaarDe8eJ_6yeYfFdLq91dF5YCLVloeBfNHmc7OAvWyW2HdtiiXBKpLMIXG3mykfd2U4HsWrNgwm_Eze4Uv56CBCJjv1JX_ghxrWcqgzf_l2PxApxdqouxqiE0kM1ecEmyOe3dqjcYll2VJ6YnHDKd8ZtLvoFQhk_jJJ5mzHRdJcqKq8MXlSwxZgE08FHOrp8zX8l95WYqhhcsHhr43TlRrY3UlXpy1COfSzK2vtcw3OOpSvODqIsefwNhh_bEmaoVH2gEkGI4sy40WeFGAGI6LmDrhV1sdBNHcK4CO9LHuU6Fs1ikFzHpy__SrG5LGPEQNpeCV94HQQNyFrF1I6FnHm9Bs8yyFnyhUUAU6f-o25ndeE0ac8HL5qnbUc4kOAsLWqAwJrOJGn7IH1zy6bETbAFod6nLDlRmfvVRtJ4kkBdSMB8wTD7ypaD_f-G2OXnoSOpWh5FEUZuq7PgmawI9ZfAFPqCc737lCVVylyMsqmQswolV65_7qZeCYzSTAoJd60-6B3BqHQKSTocIzf-gsiLqBKCcAYImtgfivmu72l_22hvYMQygfdoJ_tDqWo1VNAPSUfOOPsR4O4V1KRUJA7R9H90xye9hONhVcdY1llUU45jmkjjR0jwBSk-s3B--ydlpesOMP5hGctDtTNvtkNeTM_0frrwbCmaSSPXMbRFv0kLsk_iePAVmoS2GOPktA2n0wQ6tcQ62rl29YZa7aRIFErUOnqBYpgZOum1xH_3tVKpG0lqBWrkVr7Zv1VsZohxQyltTwKWZrJ-2gMiYOOCRRYNO_d5KMNqOrRoyiw7_nnZDVeZoT7LKI6GnhjIbjRCMj0KCCQtApwirVulPaZCWynUxzP_Kef3-Jo0IQNoaiL5UXYkv6qcYYBScZlhS5FdKsTuyHlEjzITHVnqVbG1Zgmc7hsHCH0QwS2vkHlCkUM8dB0SvqAb-im0jN9jSsMT2hBXKQ9oZb5YK1paxN2b6Iz8lmRb5x8ZJQCQvu68b4q-jos-BiOqOqMRJIEP0t8joJTvFyM0ay4rPu2c3scKTDxk0tDRFMVpI9FLf7v-fBZdma8vy5uhXI3xzRpv5LwKbbyRycsFHbh-mebe0bZhxke1sMx4vpffFot-uiQKn1WUoGQiDcXviOqloTq07MpjOh8waCJCFdKd-t-1N1pDECCVirElSvGX2-ZzRHlvbX-yS0F6pqdOkcC-SMCi-YdiEA0VwM0wZnNYzoAWQFH37BB_cR6_J-Za1QQP5bh0dj2ljAOeCE06y3d8YS0peEeC2wAdIK4NfUz4xmGmJX3soxcMfLAUb0BDuXJuaLq-MxKfzp28NZZ2wDHMWTGJ_dbe3Rhrlf9tDCnQgiiHuGhDa01JfNJt2PNdzhxD4bsvjGxkeQZoLDSDZ2CE7HBsc_XuNHvg_dhQJr1Zh13oPpNKc_I_yD6-2A6dY-TPDcZFHusHnrMqeWB0BVEIJDyNf6XD_ETO-BEqIQZuTVETJPp5g-HEhW-5IgZJmsRBs4e6UhjA7lvfrr7GoGQFnkYoM84Ryo8fBKNVF3MGGDxhmonVRXbwiBGiB2v8k1BrLagjO-HXFL3vGRAwBVYB0FnytVNnKnTyWe7FsArPsNjh2pExVvrwrYQuwatiKDk6rVFUhZGsgUUjVl4IA5TIw5NXxJb7E107zgHPv4hKvK4I2EeA7ZzsKle7EoS4Dmnj0-H-TNWfZ_r-oHziY2J1U5XiGRCXq1NJ_al7ZNcUe1zwnFFhGXg4qLz78bSuOenjAoFZfG03SLX2dFNEzgW4fMTLbyy7161wxAjiEf01wqL2KfKLD33ql33BeAGdV0U5pjrNmayuwJez6FmJcdxEnkusL5DDMSuBe4PSRicTRWW4RK5ig3nFlziIL5Lcar_Xv_AVMt-xlbosiB7aCzo29-6nNTfUIVgayQYL-x6PBugqtsaM2mn46QS73kaXamrbEkHI9FTL-Tlv-UFAYUkefrwHMEwy8V6RzBJdPC4cGL9YwonBSRRsMQWMOlhLYE1WjNDeaZYLtMJEJXhHGmELamUf-cwOtvWJi715RdWrdJXoXMt6ZhhoGlM7JtURZK5ccLFmk7PswQ0yy2uX-iKYgM9P4XfuYba0ntNhfYJ-Pdj9gxnh0sK7z1JlhEHy-b6E08R3gkse4e0njgXGkX4kpW-cwPkDpFnzaYOUQnkbJywlaoXgeea7vOWj9enGrbxX6K6tdemckUBuu9HTKNQfAXxEAMoM3Yi3l6aRi6w==","format":"openai-responses-v1","id":"rs_0dc8a771bc4d29200169b2c6a26a248195aafcaec10e972cd4","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"call_FS6r3jejWrnsF9udNRMPiyfM","role":"tool"},{"content":"6","tool_call_id":"call_Rlgo1THqC0e9mGnzP18pESCO","role":"tool"}],"model":"openai/gpt-5","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Sum","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Product","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323944-nayzP6jtcNruMtsoftEW","object":"chat.completion.chunk","created":1773323944,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":419,"completion_tokens":13,"total_tokens":432,"cost":0.00065375,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00065375,"upstream_inference_prompt_cost":0.00052375,"upstream_inference_completions_cost":0.00013},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 461.073125ms diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/simple.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/simple.yaml deleted file mode 100644 index 7d8847ba4..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 198 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323600-awq6lubEG3tK29VIkL3s\",\"object\":\"chat.completion\",\"created\":1773323600,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":\"**Responding in Portuguese**\\n\\nThe user simply asked me to say hi in Portuguese, so I think the best response is \\\"Olá!\\\" I could also add \\\"Oi!\\\" as a more informal option, but since the request was straightforward, I'll stick to \\\"Olá!\\\" to keep it concise. I want to make sure there's no heavy formatting, just a simple greeting. So, I’ll go with \\\"Olá!\\\" as my final answer.\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Responding in Portuguese**\\n\\nThe user simply asked me to say hi in Portuguese, so I think the best response is \\\"Olá!\\\" I could also add \\\"Oi!\\\" as a more informal option, but since the request was straightforward, I'll stick to \\\"Olá!\\\" to keep it concise. I want to make sure there's no heavy formatting, just a simple greeting. So, I’ll go with \\\"Olá!\\\" as my final answer.\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpssVT43b81-E6eaCubaAeFehL0rKD79C0SUicenKmTFXsOxNtLHayLnxEKx9nE8JigUY10ihErZBmdf__vn9qI6RCP2kFdA27XXX6UTeWrYUiiDdcPOkL21sblG0HUCYS9nObSELuhv4GBTG0kYqIyP66nLFlu4EDcWGj5vUIPs9pbss6elkOBW-rwpNpyAN_cBQbWHkbJrOdZF_gtEYUaVfUR9I9w4PofBZoHYGu0kVi7H0oY5PCRN_9u_FgzhLZdBn49UXEtMeeT3AsYEZRpTl-05sYzJlWmSTZoTYYu-Xs8YzAnlz2cAscU_B0ZHrkH18qiQRs57kUAnwDxCIQ6dmpqwDjuK5cytdAZDmuYGt_lYJZ_Pf3jkWqbts1fcF17u0R-Bb6cGuwp5f38BfNkkv227CDWTMxrXCN4IBI8o2QFXF7GUXnFSePSMKXbufi9CBBAoMADf9uvO7xYLkFGRlKlyE-AotC1iis9AX7zwIlQYbdPenks0Pv-fhfTCsQE1BodXmnzdBVqpdnCBaLj19KavUZT2PO3PFsSvsNpLhxPKz4LtmRBh62pkD3A6co8-c70498DEv4nPihCqns48O-OPks0Xii0-gH87njjAT47J6jbZ7WOOcbruzetE1h_3jSI_6Okc6oDx3RFW2oi1lm11m8CF2uKxGCmUFBRgDjiDYlbtU2WexopkvTUe32zn97ThJALdZfPjLMUGobGm1ZrXO68i1-1CrG6U9XITNu6xjgJax_XbRZYXpd3qz1cTqpLjm05QzU0u0KM82vcIMFx02Ea23mlqx9VcHxz5TYDJMY005Nn6Zg_sd1x0lxobW-3bJixpEWlii-eUrl3OU_BDzVFR8bAdZYJj6tlVDRqr4F9jC2jFo1R9dTGbx5meBqjGSM2yZ_A11-ENw1rTx1OAhlGOBeixOcjDQB30Gzk4MmjbaeFnv77U_NpYCA7-o18Ydoq3g245WT75CbB-do5tB4D7nOOPkHhvH_a3kNfrkYtYyjzea-bohVq702Xxwc6thK7ws5x6IW5tMzX42Fl56vaAr6qsTD44ckxAt3QJC7glEOge4jO9e5A-a1pvBBjjNIA2-YRVf-KhKeYKmGrtz22j4tvlKy9ldkmL9Rtkjtcv21QjcfoD_HguymTtmuxxLL7R-BYUIwRz8OUeDpnrrCq0J1ojE_wJBAyxOB3Ngmoo4SMrpqpndUysRgi5TDf9AZeni6vT7fKyHE_d4M2aacnqVdyc2RDxR1ODIKgna0Yo7p2jd_eglWoITN3X2Jx6AGvdZFz_XiK3VKQLVQxuvJyIBk2mPdJQ9UoWe-w3g56LOnFjCnKonMQhNSx4ZDaTLly6benk6ia13ef7e7dw==\",\"format\":\"openai-responses-v1\",\"id\":\"rs_096cf456662aacbc0169b2c5508b80819394f5df5d3da98e69\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":104,\"total_tokens\":123,\"cost\":0.00106375,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00106375,\"upstream_inference_prompt_cost\":0.00002375,\"upstream_inference_completions_cost\":0.00104},\"completion_tokens_details\":{\"reasoning_tokens\":64,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 490.3535ms diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/simple_streaming.yaml deleted file mode 100644 index e885dc038..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/simple_streaming.yaml +++ /dev/null @@ -1,192 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 252 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Respond","reasoning_details":[{"type":"reasoning.summary","summary":"**Respond","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ing","reasoning_details":[{"type":"reasoning.summary","summary":"ing","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.summary","summary":" Portuguese","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n\nThe","reasoning_details":[{"type":"reasoning.summary","summary":"**\n\nThe","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.summary","summary":" me","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.summary","summary":" say","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi","reasoning_details":[{"type":"reasoning.summary","summary":" hi","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.summary","summary":" Portuguese","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.summary","summary":" which","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" straightforward","reasoning_details":[{"type":"reasoning.summary","summary":" straightforward","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" think","reasoning_details":[{"type":"reasoning.summary","summary":" think","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"’ll","reasoning_details":[{"type":"reasoning.summary","summary":"’ll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" go","reasoning_details":[{"type":"reasoning.summary","summary":" go","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" “","reasoning_details":[{"type":"reasoning.summary","summary":" “","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Olá","reasoning_details":[{"type":"reasoning.summary","summary":"Olá","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!”","reasoning_details":[{"type":"reasoning.summary","summary":"!”","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" maybe","reasoning_details":[{"type":"reasoning.summary","summary":" maybe","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" “","reasoning_details":[{"type":"reasoning.summary","summary":" “","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.summary","summary":"Oi","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!”","reasoning_details":[{"type":"reasoning.summary","summary":"!”","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" too","reasoning_details":[{"type":"reasoning.summary","summary":" too","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Both","reasoning_details":[{"type":"reasoning.summary","summary":" Both","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.summary","summary":" are","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.summary","summary":" common","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greetings","reasoning_details":[{"type":"reasoning.summary","summary":" greetings","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.summary","summary":" but","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" want","reasoning_details":[{"type":"reasoning.summary","summary":" want","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" keep","reasoning_details":[{"type":"reasoning.summary","summary":" keep","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.summary","summary":" simple","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" minimal","reasoning_details":[{"type":"reasoning.summary","summary":" minimal","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" without","reasoning_details":[{"type":"reasoning.summary","summary":" without","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" heavy","reasoning_details":[{"type":"reasoning.summary","summary":" heavy","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formatting","reasoning_details":[{"type":"reasoning.summary","summary":" formatting","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" So","reasoning_details":[{"type":"reasoning.summary","summary":" So","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" my","reasoning_details":[{"type":"reasoning.summary","summary":" my","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" final","reasoning_details":[{"type":"reasoning.summary","summary":" final","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.summary","summary":" response","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" will","reasoning_details":[{"type":"reasoning.summary","summary":" will","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.summary","summary":" just","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.summary","summary":" be","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" “","reasoning_details":[{"type":"reasoning.summary","summary":" “","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Olá","reasoning_details":[{"type":"reasoning.summary","summary":"Olá","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" O","reasoning_details":[{"type":"reasoning.summary","summary":" O","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"i","reasoning_details":[{"type":"reasoning.summary","summary":"i","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!”","reasoning_details":[{"type":"reasoning.summary","summary":"!”","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" That","reasoning_details":[{"type":"reasoning.summary","summary":" That","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.summary","summary":" should","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" cover","reasoning_details":[{"type":"reasoning.summary","summary":" cover","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" nicely","reasoning_details":[{"type":"reasoning.summary","summary":" nicely","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"gAAAAABpssVXjNGXXo9bBuifshsmRhLcI5eDiRiyZPaAkk-UANLXGORCzvCq3E0leoWO1jHfEgPEJf6axo5V8-f53DE6VDzQpI9dfdQtVvk8CBAWtznZq2D_LjkORMSerfX9bM63kVM2ZwG4TkDadN3cMgkk1caMj15cjRAYlis36QPdDVeNtK30LG2l5Gm8KOY3wYShb8a9SHosBkgYP33Z8BY4K71Z4eDmKLoafyxlKMwcv11dNmdDzCry38Coxcn8j5r5FDL2ezybW8OR8ARKXafMtG1PcaO2_9Is86myXqZFVCDZk7cIlgel6lUiuiasfmPkctuNaTJ1oibB-9Pbi3u6fj2w03mNHIPaA-9mPT_PcS8GeJpe0PTD0-pNO6r9kPQIOX_QwTQiZfngq_ywc8l4H9gh53hSroeUHEVVcT8u9OPAq0zShXg5SUem4lqP25jqwa30hoy7QBgSUrNaNnJ3YyTHl0txehzWb150vZ4P5tib41MIWb2vKBy8nHeAQw9IRsi8oi2cipGVs1r1z0GK_giVU44yqAKGQ0Or57EanS_PtOkAIvMc6nafAk59l_WmUj8VSkxXpccBWFxT0EW9lnM5d7f-rgedmPVcmwPO5gdbodDwj_vbD1vAYf7uqDwKya-8w91hbcFrgu-kPNbo3E4D52oW28vPvZoVx0NTfEBL_TTRTy5DCMY37oMZ-Hf353NIHKSr_GVrK4B4pNuaJ3aftLDwh3oDhRHT51QpLdT-J3WWK2YP0ZeHtDfJTlGre95W6fEQrrn042XUIXDvD0PHyMoUvwBovBk7PGUtGWcE8W53cA_liaUJuBBLWJZTYpilth1tWAJu61E_NRJh0vbct9A-46dBas72ZRUPmT4ewIRlG6DZNgOXHrqKQJ-pboiZ11rr7hETBhLGngUJK3-yXC8e97_ShZSdKT_6pwoP2rrE4xhEvL2P3NnfZNMWUywYlQb2a5e3JQeWkvlbNNycVe9gdfMs0V60RjiKElJlfzFQP_WUZEOese_PYtlxtl7wfEVj1nUSDoHVdXJhAfWKyIgRy23AtW6rrDhiOZF7RYAnM8AVign7uY2MZj6miLvFZx9QVLHP2eYHHg08ViUUiY_LQX5YMoLwPLH2oXdfqnWkBe_JaXVg7cvNB6O8oVfz3ond6c039e2SfHvFzAvjWNf86Vb-teJTIkEie37FP9VJ_t4g1FTm358d5d7NGw24HbyLEOILDALK5QtyM1a4miOJ0yPD3WzeoTsgvg-g2LA=","format":"openai-responses-v1","id":"rs_062c1b482d136c820169b2c554b8408190bca80f1fb7b7b1cc","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Olá","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323604-9IpQobLg7KsFzVKRLFDH","object":"chat.completion.chunk","created":1773323604,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":19,"completion_tokens":83,"total_tokens":102,"cost":0.00085375,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00085375,"upstream_inference_prompt_cost":0.00002375,"upstream_inference_completions_cost":0.00083},"completion_tokens_details":{"reasoning_tokens":64,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 502.063583ms diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/tool.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/tool.yaml deleted file mode 100644 index e8c5c0ee6..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 490 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324575-QAAZrqJLYWL3AOSJPPiO\",\"object\":\"chat.completion\",\"created\":1773324575,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Gathering weather info**\\n\\nI need to provide the weather information. I have a weather tool at my disposal, which takes a location as an input. Since we only need one tool, I’ll go ahead and call functions.weather. But wait, there might be confusion about which Florence the user means—Italy or South Carolina. Since the user specified Florence, Italy, that's clear! Now, I can proceed to call the tool.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_gFD4BCgLbZibgm4lz6Gaxo9e\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Gathering weather info**\\n\\nI need to provide the weather information. I have a weather tool at my disposal, which takes a location as an input. Since we only need one tool, I’ll go ahead and call functions.weather. But wait, there might be confusion about which Florence the user means—Italy or South Carolina. Since the user specified Florence, Italy, that's clear! Now, I can proceed to call the tool.\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpsskjL6NtLMm2gYf8B_84HgKgn3wMb79fhKZcK4WDqzWel-KZfZasScjM_t8s6P9LlyU7eTbo7GKO4aeMPJalyxZX3a-9E2Ski8Hum4YkjP5fUtZK3HRzxZwFE7jONXKUWZxdSqaFGKGI-3KC4CcQ2c9TXdEHVQHFtEACaan_gfMh4ehk418rI-3fSO_dgMrs6VXglta5TTt3Y9CbWiyOKs3i92avS_jxvWGekuj9adZqI9R17f4X6rBnWCYhQshEmj8Yn_kOVqa2we3tl9P7vQNBjVG8DxyigpGQlAzWI8M1sBobiUg6CzvA2SrkoHJNgPUWNLFry5K8h_1pLRtS_xGGx-UFeaUsg9lH2l4vcgdhkr5ehfbJEd6B06pjIWjHAsTJC0FtO3ELDGOSOYM2NIQvpxkMkVdDH8LKdO2vq7Ws0mvsJ5WEHWb_wbHYIZmh_JjOpoXHTsiV42xXRk21laU0XF4aEK9uVhdJaNuhKBIt4R3A3iRwl0C4YYTxmyO1iIkHFN1osdfUut48jTpK3cZJN8Eh0xEvR6qckKzgfyhHH5LSu3GHCOobJsyAGvIMsgW1M1j0F2-HCWwx00EFc3gjKr8Ij1ts7LFlRTqVKU-xuS8uxOrhZuztB6LZGMcy6RIt1kzGieXF79omc8XPwgQXdCNapaU70Qzof84WuiZb11Z9s9PH0ikG-I0gVi6XNp4AN8rVlYvs-NVEuXGn-eiJkqBZwkv5Vwh3P39CVX0rsTr1mR512yaC45XOQQlGi1T21j9vxD2CvJwOvil519AeqmWSm8xJ-EXR6OSsp4_5YBRUIujv-3HB0WDRVeE7BOXqcc-pbZLLQTVUPtY76X-GOjuVKUB8vQCUiucy-YL_V4q56lv_k3IoD2pJSfydFNfNAE8m33vfbboMrqXwYbDzBifp9w5L3yYziRKp8TI6F0AOMajF2eGmJh9Ouo64TnQQmST1UFBLtr1di-bIM3caYhhGaGuA8HX2rN6ZW7je4128oRP4DbcSujNxPpxxAT_QS6yXyOmKM9eavhbIqKD4qgQkD6BN3ofLeZcfms6qNHZMN78Yq6WlRYibR3P5ycmAakiETbwka5Y8LB0ljXm9mvhlgRCvjylgi-B3djgWVtCUWTkD5hLGRtH0j9217WEaErkaXWKKBVuzmG8CdElz2Ziei6YW59UjzYdr9DVDcz65Sw_64xAhDQ3ddShNi4AtCxmDIj1fZ4YkpKa6JNeluWHPGkxGY4jNhR0dC-lgm-I1umBpwAOAxn6owHQ-g2EbYhVinOje-hqlHeR4bct7kOH-KK85YA0O_EEdVUFAFNjMkN7cKxmZBQv7a060TQQG\",\"format\":\"openai-responses-v1\",\"id\":\"rs_08acd5c21bf032190169b2c9202940819681ab3b773d32d468\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":63,\"completion_tokens\":102,\"total_tokens\":165,\"cost\":0.00109875,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00109875,\"upstream_inference_prompt_cost\":0.00007875,\"upstream_inference_completions_cost\":0.00102},\"completion_tokens_details\":{\"reasoning_tokens\":64,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 459.379584ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2263 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_gFD4BCgLbZibgm4lz6Gaxo9e","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"gAAAAABpsskjL6NtLMm2gYf8B_84HgKgn3wMb79fhKZcK4WDqzWel-KZfZasScjM_t8s6P9LlyU7eTbo7GKO4aeMPJalyxZX3a-9E2Ski8Hum4YkjP5fUtZK3HRzxZwFE7jONXKUWZxdSqaFGKGI-3KC4CcQ2c9TXdEHVQHFtEACaan_gfMh4ehk418rI-3fSO_dgMrs6VXglta5TTt3Y9CbWiyOKs3i92avS_jxvWGekuj9adZqI9R17f4X6rBnWCYhQshEmj8Yn_kOVqa2we3tl9P7vQNBjVG8DxyigpGQlAzWI8M1sBobiUg6CzvA2SrkoHJNgPUWNLFry5K8h_1pLRtS_xGGx-UFeaUsg9lH2l4vcgdhkr5ehfbJEd6B06pjIWjHAsTJC0FtO3ELDGOSOYM2NIQvpxkMkVdDH8LKdO2vq7Ws0mvsJ5WEHWb_wbHYIZmh_JjOpoXHTsiV42xXRk21laU0XF4aEK9uVhdJaNuhKBIt4R3A3iRwl0C4YYTxmyO1iIkHFN1osdfUut48jTpK3cZJN8Eh0xEvR6qckKzgfyhHH5LSu3GHCOobJsyAGvIMsgW1M1j0F2-HCWwx00EFc3gjKr8Ij1ts7LFlRTqVKU-xuS8uxOrhZuztB6LZGMcy6RIt1kzGieXF79omc8XPwgQXdCNapaU70Qzof84WuiZb11Z9s9PH0ikG-I0gVi6XNp4AN8rVlYvs-NVEuXGn-eiJkqBZwkv5Vwh3P39CVX0rsTr1mR512yaC45XOQQlGi1T21j9vxD2CvJwOvil519AeqmWSm8xJ-EXR6OSsp4_5YBRUIujv-3HB0WDRVeE7BOXqcc-pbZLLQTVUPtY76X-GOjuVKUB8vQCUiucy-YL_V4q56lv_k3IoD2pJSfydFNfNAE8m33vfbboMrqXwYbDzBifp9w5L3yYziRKp8TI6F0AOMajF2eGmJh9Ouo64TnQQmST1UFBLtr1di-bIM3caYhhGaGuA8HX2rN6ZW7je4128oRP4DbcSujNxPpxxAT_QS6yXyOmKM9eavhbIqKD4qgQkD6BN3ofLeZcfms6qNHZMN78Yq6WlRYibR3P5ycmAakiETbwka5Y8LB0ljXm9mvhlgRCvjylgi-B3djgWVtCUWTkD5hLGRtH0j9217WEaErkaXWKKBVuzmG8CdElz2Ziei6YW59UjzYdr9DVDcz65Sw_64xAhDQ3ddShNi4AtCxmDIj1fZ4YkpKa6JNeluWHPGkxGY4jNhR0dC-lgm-I1umBpwAOAxn6owHQ-g2EbYhVinOje-hqlHeR4bct7kOH-KK85YA0O_EEdVUFAFNjMkN7cKxmZBQv7a060TQQG","format":"openai-responses-v1","id":"rs_08acd5c21bf032190169b2c9202940819681ab3b773d32d468","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"call_gFD4BCgLbZibgm4lz6Gaxo9e","role":"tool"}],"model":"openai/gpt-5","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324580-BKAyo0fFzswyhbH0C1AI\",\"object\":\"chat.completion\",\"created\":1773324580,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C (104°F). Would you like details like forecast, humidity, or wind?\",\"refusal\":null,\"reasoning\":\"**Presenting temperature info**\\n\\nThe tool returned \\\"40 C,\\\" so that’s just the temperature. I need to present it clearly while mentioning that it’s recent data. I'll say, \\\"The current temperature in Florence, Italy, is 40°C (104°F).\\\" If they want more details like humidity or the forecast, I’ll encourage them to ask for more info. I want to keep it concise, so I’ll avoid special formatting and stick to the essentials!\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Presenting temperature info**\\n\\nThe tool returned \\\"40 C,\\\" so that’s just the temperature. I need to present it clearly while mentioning that it’s recent data. I'll say, \\\"The current temperature in Florence, Italy, is 40°C (104°F).\\\" If they want more details like humidity or the forecast, I’ll encourage them to ask for more info. I want to keep it concise, so I’ll avoid special formatting and stick to the essentials!\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpsskpwHoAl_Bba2upIUQg59eX-Rx9a42XKkd6SIeMa4QpEfHYSmcAv2ctT0tMpHxfpyyf1qhEaJGTJNUZLnL6LIG1tjI-exXfo2f4ljOuB4-t_2u5X8jyflsIFcOj_Sjcx3hn-BlUQG2OAhODyxxBOSY2sbZhXJ5rhErFWt8UKVnOG79lHfxei-0jUquRzw91a43b7U2eVlguFrwAu6OzH711_AWKcTX6QZi00fjpJO8tv11U6TQxtO9hTRHCNHCbigteXl5foDxX6Ng9BZr13AKxa538o3X0habthkKwyDjJbmqsmv5ejgBGU_RummUHeUsGinSvL_1lLOwtDwaJrGVv6tbvxV89zH9JQPgrdQFqrXjcQjY3VuETNsRLuucnpLnWD9Qmd98gY1HJ5Zp1ONauxi5QS5DCfhR0xCVUguwigq-btox1Un9gO4DlllUBUwzrQ1Vp-_i3G9kA2FDvObnSyvH_LaWsPjMsCZNtAMOcrvc7CcXSTbJakGTzFMANX-Bu5rgWo7YGPOM3d9jt_G9mfaDdbUngg1BEEUTDkLctZdWZWVbM0ScDvrRvwX5csAxK1-vBihmrQyBB-dtpXHH937uyjv4v_Y-SaULuz4ei779bv79Ok29MHmmkTtAJyf8gtAOW43oIF6mEQLJWfeqaTQaC97wnMF5CzHGSX694SqIPEQ2Grf2_pephXbhe155jmlDLAlYkCijbdwX7OZ_MhAU36VdJ0LGLAcbsZ4RtBCmqgqm4qTbzQoMHvYG0u2cC2H5HBrt-h-wortBViDW9uT7qXQX-axOr9CnCakVLCY7hv6cNkSj1Xj72Y75UXdO6L8PEve1vhX7S8Skw-ekt5ku84ZGJq86HkS33s5zl-q2YCIZj9YsG19ERS9-6NAdFhKH59ekexIHcZ4oPirinLjnvxjHd1iJ0qFtv8dVRBJYu4nqFrFCJNqKZ2k-ZwtTrG4ATTz6MpFmZG3g8YHZ1weiIyJi3X0o73f53pWD71-a6WbeotrYVAEmLkYHv3MLS2687_H7KLtym7-CBcbeszcYkl0xD5gSPo-fIRWu5yFMyAK-5W_b0f7WPRerfNuMh1fOXbvK2bbNYVWruZX7CH2k3qAtyk_jpRFw1yAALtvNnGoOdxJl4SNylaA6HkEyoYB-ZFQjf8G23av6jHmYzlpon8zgcwmgW98jNpTXKi_15foFgVjs3RUycsbZl6SgheraCNRzbbGNguSZdFvjrHuFzGVBq11QqfJ5f_rjlvixRKjV79sN7cmwUCMNMHN2JfNf8AJFU7Nofinh4UM4L0xFsOgwK1nHyTxqfkW1ygGwARB1EzVqak53JbK8FN7GiS7nMWmdiyAbH_GLMyebjl-o5nAMpYFRxiiQGw6V9s1sJ6DcmQYRcGVKSHABijQpU2k_FMyaMFbvyw5-ZC-ZCRewGcMzPY2AXmF37iZzIfC61kNsuOwSrxSM5NW3G-WUFq9bMADM8xzeKyLlVo_RMFGV2LmbXINhWGy7JQr5NWRoej6S4f-IfFcuUyGYqblwF9_s2nWx4Lg952ijUVYdVoL_hYxLMi2jU0mZ4xuCiAMjrTZEdjq7EG3xKoRr-Hy7gJAibtquYIfrZMK1faRUAjDJwrX6OnVk61_UN6ccFhzTmx78m7oSuzIdIE-5AS30-LkAtRpNokZipuGk_yk0ltehnypoqdZPUD2235iEgjJOUkGdMMFdt8IsZIISgdtD8mWMGhSP62QA2g1AzvbiH3M2QhBfufheGbNNFUF1eqeFT1wDtgj35DVZ48TH1q6M8\",\"format\":\"openai-responses-v1\",\"id\":\"rs_08acd5c21bf032190169b2c924ca6c81969a2391f5acda101c\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":174,\"completion_tokens\":192,\"total_tokens\":366,\"cost\":0.0021375,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0021375,\"upstream_inference_prompt_cost\":0.0002175,\"upstream_inference_completions_cost\":0.00192},\"completion_tokens_details\":{\"reasoning_tokens\":128,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 520.646583ms diff --git a/providertests/testdata/TestOpenRouterCommon/gpt-5/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gpt-5/tool_streaming.yaml deleted file mode 100644 index aedec3efe..000000000 --- a/providertests/testdata/TestOpenRouterCommon/gpt-5/tool_streaming.yaml +++ /dev/null @@ -1,555 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 544 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"openai/gpt-5","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Getting","reasoning_details":[{"type":"reasoning.summary","summary":"**Getting","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.summary","summary":" information","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n\nI","reasoning_details":[{"type":"reasoning.summary","summary":"**\n\nI","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.summary","summary":" have","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" retrieve","reasoning_details":[{"type":"reasoning.summary","summary":" retrieve","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" using","reasoning_details":[{"type":"reasoning.summary","summary":" using","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.summary","summary":" function","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.summary","summary":" should","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.summary","summary":" call","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.summary","summary":" location","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flor","reasoning_details":[{"type":"reasoning.summary","summary":"Flor","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ence","reasoning_details":[{"type":"reasoning.summary","summary":"ence","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",\"","reasoning_details":[{"type":"reasoning.summary","summary":",\"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" though","reasoning_details":[{"type":"reasoning.summary","summary":" though","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" could","reasoning_details":[{"type":"reasoning.summary","summary":" could","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" also","reasoning_details":[{"type":"reasoning.summary","summary":" also","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"F","reasoning_details":[{"type":"reasoning.summary","summary":"F","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"irenze","reasoning_details":[{"type":"reasoning.summary","summary":"irenze","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\"","reasoning_details":[{"type":"reasoning.summary","summary":".\"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" For","reasoning_details":[{"type":"reasoning.summary","summary":" For","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" now","reasoning_details":[{"type":"reasoning.summary","summary":" now","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" passing","reasoning_details":[{"type":"reasoning.summary","summary":" passing","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flor","reasoning_details":[{"type":"reasoning.summary","summary":"Flor","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ence","reasoning_details":[{"type":"reasoning.summary","summary":"ence","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.summary","summary":"\"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" seems","reasoning_details":[{"type":"reasoning.summary","summary":" seems","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" like","reasoning_details":[{"type":"reasoning.summary","summary":" like","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" best","reasoning_details":[{"type":"reasoning.summary","summary":" best","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" option","reasoning_details":[{"type":"reasoning.summary","summary":" option","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.summary","summary":" Since","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" only","reasoning_details":[{"type":"reasoning.summary","summary":" only","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" one","reasoning_details":[{"type":"reasoning.summary","summary":" one","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" there's","reasoning_details":[{"type":"reasoning.summary","summary":" there's","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" no","reasoning_details":[{"type":"reasoning.summary","summary":" no","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parallel","reasoning_details":[{"type":"reasoning.summary","summary":" parallel","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" feature","reasoning_details":[{"type":"reasoning.summary","summary":" feature","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"’ll","reasoning_details":[{"type":"reasoning.summary","summary":"’ll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.summary","summary":" make","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.summary","summary":" call","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" commentary","reasoning_details":[{"type":"reasoning.summary","summary":" commentary","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" channel","reasoning_details":[{"type":"reasoning.summary","summary":" channel","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" then","reasoning_details":[{"type":"reasoning.summary","summary":" then","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" await","reasoning_details":[{"type":"reasoning.summary","summary":" await","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" real","reasoning_details":[{"type":"reasoning.summary","summary":" real","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-time","reasoning_details":[{"type":"reasoning.summary","summary":"-time","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" output","reasoning_details":[{"type":"reasoning.summary","summary":" output","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" from","reasoning_details":[{"type":"reasoning.summary","summary":" from","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let's","reasoning_details":[{"type":"reasoning.summary","summary":" Let's","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" go","reasoning_details":[{"type":"reasoning.summary","summary":" go","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ahead","reasoning_details":[{"type":"reasoning.summary","summary":" ahead","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.summary","summary":" call","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"gAAAAABpssaNq12W_1_I-RQQ8NVc-eIoe2G6d1e5M5x2tyxK5ZGI8kvBBLTL0qNgPjkhExrLJmSKNQ6K_J-red6yy6up_oMhJyvyx4nmY2Pg_F7lsjBOQnks68B5zqVPYJrRhQCGSlpYGh3axgn2kXh7UrbXeJs3llYid9lxkKrHkriNBkrpU9T5QPlpyl-mukxYowe_foXyrbwEIC_vOd4nwq2W27vOwle6kpKFhUVCr4GNTDdJtmy_GTpALjsnrPkjqYLqryQD8nwuotb-DF_-aqx0YmaKsjKl9wqMutMT3-TrXAMbuhpNYOiASBP_e8w7mIqS3KoEdoQ_GfZJ4i9BhXuARi5WAoGY8KQUBc786lwUn_54yH75Gh579TJheJxiujmGDRD-xJ07FkTjz8IDWkhvGLQhd-O7SmiXNCYT3giCWYByp9yCDP5Xow6aEIsIut39JBB_U8xT-L0aHYPNKQOfO5MWwlJiFMZbDvqkwGHpi6yUfj_akMz7n6_3h3sIeWS131ZN9lzomXgBaSnmGyMGgNAST7vgU1hxv38ZMcbGBj6vmPTZfK-qL3sRntEoKzWjg3PzAsre4Mg1DXG93uXW0Nvhw-i117D2SkrzS4SfgtI1qGw1b61st0XiQvfB3xSAp4gIn4q60S-PQwASZboy7WXUkrxScU9KNs2pTwcI0mV5dHYD4UD7Aa9I7wrT_K8gPVwO7srtc50FzxeVB5Ed-aRQoRV-8idbJgAlx-Ctc5FW_aq9vYoKuZlZMjg3Hq7mXSZAu_khZl7o7jmRd0l8w2teDRevlW5HZxmxgkBrnKLxwh5uoGPLbdU2mpjm16XkRvL1q1dr78ikDjo-aOR1zdmTlB5X3Hw8to6kyTFZKeHPV4R8jtIul0ggRXgC_DcqFU02wQrHxTMGrlNnPdHxyhIFa2JS2BtcrYtl0P7Fu4sjE4ZEd6yHMUYTn0BYh0IWRAIg2vR1Xm0ES4V5FdAGFSlELxdh-YlyHm1R_h73pjr90v094RyKf7oH9xY49OV6Dlge-Vf7iwXXxz_BZ2zoyQ9Hf0g6LKNyTxTUA4nyc3_WKU-r5nrdpgoMAtdetC-jRSoj89aedP8ZjSwCU5G3pTNrQXPD7I4SADcg6em8akC4E0hXTpAnc0JvTU4YqXdt6lFX9CgDEeCOCe54KA9YFIT63ayDpt-PvSfVhqv2AgnXD2IBwmSu-sQ11SfBuMtcP2puPjx5Smass1KmOOW-fdndYsf99IueCt8ZmYNGznvrqnVavE9wEhszobN0eJxtON2LxNPcqp7hZX6e8LJ_r2T-ex3A5zARsgYZ9QEpk4n4JvJiC87wvxcktf5sCpJBN3GH_09AS62LoFKy1kiX5hDJBgLSPZfQcK-zhjMinknZFt2Xjq9Pw5PTHGXxOKJj9Chp2Wvq-x0vALV3lqN4Y2U20c0K1sptgATFdFVRBpDb9knWb2AH3ZKcmFWdWfGti3Yq3sMF8K6TfoYDEVzDitOqsQEbZ4nM_KHMd_IYluKcrjjmmM2iaD8FBuZEQPKTZtZuOjve7UcF2sVfRfYixu_NcWP9XB-0i6SfahBBayRS12_fF1uVxeLkjH2m3-9EoKg7HsgPhkYBG6V8dqH3Dw3mYNbAD89jXEJoYR7PFGM6UWS3hFwzH7UDx5EzpFNFBHTe53-il5T-wAJgR_HqNEngxcajR1-y8uNQyqoVcJOqM7k=","format":"openai-responses-v1","id":"rs_0bfb3c7ab58c62390169b2c689bae481948e204164078f0a4d","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_hnnrDaY1XtDCJEzDlIa8izSX","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323913-bRa4PMpo2opwWrm6Zgux","object":"chat.completion.chunk","created":1773323913,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":63,"completion_tokens":157,"total_tokens":220,"cost":0.00164875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00164875,"upstream_inference_prompt_cost":0.00007875,"upstream_inference_completions_cost":0.00157},"completion_tokens_details":{"reasoning_tokens":128,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 576.979583ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 3221 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_hnnrDaY1XtDCJEzDlIa8izSX","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"openai-responses-v1","index":0,"summary":"**Getting weather information**\n\nI have a tool to retrieve the weather using the function. I should call it with the location \"Florence, Italy,\" though I could also use \"Firenze.\" For now, passing \"Florence, Italy\" seems like the best option. Since I only need one tool, there''s no need to use the parallel feature. I’ll make the call in the commentary channel and then await the real-time weather output from the tool. Let''s go ahead and call it!","type":"reasoning.summary"},{"data":"gAAAAABpssaNq12W_1_I-RQQ8NVc-eIoe2G6d1e5M5x2tyxK5ZGI8kvBBLTL0qNgPjkhExrLJmSKNQ6K_J-red6yy6up_oMhJyvyx4nmY2Pg_F7lsjBOQnks68B5zqVPYJrRhQCGSlpYGh3axgn2kXh7UrbXeJs3llYid9lxkKrHkriNBkrpU9T5QPlpyl-mukxYowe_foXyrbwEIC_vOd4nwq2W27vOwle6kpKFhUVCr4GNTDdJtmy_GTpALjsnrPkjqYLqryQD8nwuotb-DF_-aqx0YmaKsjKl9wqMutMT3-TrXAMbuhpNYOiASBP_e8w7mIqS3KoEdoQ_GfZJ4i9BhXuARi5WAoGY8KQUBc786lwUn_54yH75Gh579TJheJxiujmGDRD-xJ07FkTjz8IDWkhvGLQhd-O7SmiXNCYT3giCWYByp9yCDP5Xow6aEIsIut39JBB_U8xT-L0aHYPNKQOfO5MWwlJiFMZbDvqkwGHpi6yUfj_akMz7n6_3h3sIeWS131ZN9lzomXgBaSnmGyMGgNAST7vgU1hxv38ZMcbGBj6vmPTZfK-qL3sRntEoKzWjg3PzAsre4Mg1DXG93uXW0Nvhw-i117D2SkrzS4SfgtI1qGw1b61st0XiQvfB3xSAp4gIn4q60S-PQwASZboy7WXUkrxScU9KNs2pTwcI0mV5dHYD4UD7Aa9I7wrT_K8gPVwO7srtc50FzxeVB5Ed-aRQoRV-8idbJgAlx-Ctc5FW_aq9vYoKuZlZMjg3Hq7mXSZAu_khZl7o7jmRd0l8w2teDRevlW5HZxmxgkBrnKLxwh5uoGPLbdU2mpjm16XkRvL1q1dr78ikDjo-aOR1zdmTlB5X3Hw8to6kyTFZKeHPV4R8jtIul0ggRXgC_DcqFU02wQrHxTMGrlNnPdHxyhIFa2JS2BtcrYtl0P7Fu4sjE4ZEd6yHMUYTn0BYh0IWRAIg2vR1Xm0ES4V5FdAGFSlELxdh-YlyHm1R_h73pjr90v094RyKf7oH9xY49OV6Dlge-Vf7iwXXxz_BZ2zoyQ9Hf0g6LKNyTxTUA4nyc3_WKU-r5nrdpgoMAtdetC-jRSoj89aedP8ZjSwCU5G3pTNrQXPD7I4SADcg6em8akC4E0hXTpAnc0JvTU4YqXdt6lFX9CgDEeCOCe54KA9YFIT63ayDpt-PvSfVhqv2AgnXD2IBwmSu-sQ11SfBuMtcP2puPjx5Smass1KmOOW-fdndYsf99IueCt8ZmYNGznvrqnVavE9wEhszobN0eJxtON2LxNPcqp7hZX6e8LJ_r2T-ex3A5zARsgYZ9QEpk4n4JvJiC87wvxcktf5sCpJBN3GH_09AS62LoFKy1kiX5hDJBgLSPZfQcK-zhjMinknZFt2Xjq9Pw5PTHGXxOKJj9Chp2Wvq-x0vALV3lqN4Y2U20c0K1sptgATFdFVRBpDb9knWb2AH3ZKcmFWdWfGti3Yq3sMF8K6TfoYDEVzDitOqsQEbZ4nM_KHMd_IYluKcrjjmmM2iaD8FBuZEQPKTZtZuOjve7UcF2sVfRfYixu_NcWP9XB-0i6SfahBBayRS12_fF1uVxeLkjH2m3-9EoKg7HsgPhkYBG6V8dqH3Dw3mYNbAD89jXEJoYR7PFGM6UWS3hFwzH7UDx5EzpFNFBHTe53-il5T-wAJgR_HqNEngxcajR1-y8uNQyqoVcJOqM7k=","format":"openai-responses-v1","id":"rs_0bfb3c7ab58c62390169b2c689bae481948e204164078f0a4d","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"call_hnnrDaY1XtDCJEzDlIa8izSX","role":"tool"}],"model":"openai/gpt-5","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Present","reasoning_details":[{"type":"reasoning.summary","summary":"**Present","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ing","reasoning_details":[{"type":"reasoning.summary","summary":"ing","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" updates","reasoning_details":[{"type":"reasoning.summary","summary":" updates","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n\nThe","reasoning_details":[{"type":"reasoning.summary","summary":"**\n\nThe","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.summary","summary":" returned","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.summary","summary":"40","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" C","reasoning_details":[{"type":"reasoning.summary","summary":" C","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.summary","summary":"\"","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.summary","summary":" which","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" likely","reasoning_details":[{"type":"reasoning.summary","summary":" likely","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" means","reasoning_details":[{"type":"reasoning.summary","summary":" means","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that's","reasoning_details":[{"type":"reasoning.summary","summary":" that's","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.summary","summary":" just","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" temperature","reasoning_details":[{"type":"reasoning.summary","summary":" temperature","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" think","reasoning_details":[{"type":"reasoning.summary","summary":" think","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.summary","summary":" should","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.summary","summary":" present","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.summary","summary":" this","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.summary","summary":" clearly","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" maybe","reasoning_details":[{"type":"reasoning.summary","summary":" maybe","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" checking","reasoning_details":[{"type":"reasoning.summary","summary":" checking","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" if","reasoning_details":[{"type":"reasoning.summary","summary":" if","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" needs","reasoning_details":[{"type":"reasoning.summary","summary":" needs","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" date","reasoning_details":[{"type":"reasoning.summary","summary":" date","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.summary","summary":" or","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" context","reasoning_details":[{"type":"reasoning.summary","summary":" context","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" could","reasoning_details":[{"type":"reasoning.summary","summary":" could","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" note","reasoning_details":[{"type":"reasoning.summary","summary":" note","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"’s","reasoning_details":[{"type":"reasoning.summary","summary":"’s","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" currently","reasoning_details":[{"type":"reasoning.summary","summary":" currently","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" around","reasoning_details":[{"type":"reasoning.summary","summary":" around","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" 40","reasoning_details":[{"type":"reasoning.summary","summary":" 40","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.summary","summary":"°C","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Providing","reasoning_details":[{"type":"reasoning.summary","summary":" Providing","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" conversion","reasoning_details":[{"type":"reasoning.summary","summary":" conversion","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Fahrenheit","reasoning_details":[{"type":"reasoning.summary","summary":" Fahrenheit","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" would","reasoning_details":[{"type":"reasoning.summary","summary":" would","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.summary","summary":" be","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.summary","summary":" helpful","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" too","reasoning_details":[{"type":"reasoning.summary","summary":" too","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" so","reasoning_details":[{"type":"reasoning.summary","summary":" so","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'll","reasoning_details":[{"type":"reasoning.summary","summary":" I'll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.summary","summary":" say","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it's","reasoning_details":[{"type":"reasoning.summary","summary":" it's","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.summary","summary":" about","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" 104","reasoning_details":[{"type":"reasoning.summary","summary":" 104","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°F","reasoning_details":[{"type":"reasoning.summary","summary":"°F","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Keeping","reasoning_details":[{"type":"reasoning.summary","summary":" Keeping","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" concise","reasoning_details":[{"type":"reasoning.summary","summary":" concise","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" might","reasoning_details":[{"type":"reasoning.summary","summary":" might","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" also","reasoning_details":[{"type":"reasoning.summary","summary":" also","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" suggest","reasoning_details":[{"type":"reasoning.summary","summary":" suggest","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" staying","reasoning_details":[{"type":"reasoning.summary","summary":" staying","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hydrated","reasoning_details":[{"type":"reasoning.summary","summary":" hydrated","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" follow","reasoning_details":[{"type":"reasoning.summary","summary":" follow","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" up","reasoning_details":[{"type":"reasoning.summary","summary":" up","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" “","reasoning_details":[{"type":"reasoning.summary","summary":" “","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Want","reasoning_details":[{"type":"reasoning.summary","summary":"Want","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" forecast","reasoning_details":[{"type":"reasoning.summary","summary":" forecast","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" by","reasoning_details":[{"type":"reasoning.summary","summary":" by","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hour","reasoning_details":[{"type":"reasoning.summary","summary":" hour","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.summary","summary":" or","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" next","reasoning_details":[{"type":"reasoning.summary","summary":" next","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" few","reasoning_details":[{"type":"reasoning.summary","summary":" few","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" days","reasoning_details":[{"type":"reasoning.summary","summary":" days","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?”","reasoning_details":[{"type":"reasoning.summary","summary":"?”","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"gAAAAABpssaTCSEpABSSdiVPgqTF1ID_xoP5if1RQKCfnzNiIJW6jwuoQNCntu-BHyYgcG6ZT0it9wsq4HVYFploFGR2M8i1vUi84PTynaUTXY1u-RHRJQGwXUp6KTKKy6QApkhXM1HjfyuVXb2tI1ki35HJbrHThZoGODVeZVvBv6aitbtqvvJ_-xm7xJoBr7gqCZ9M5uHF9akXhSnEximy3L_0ggXCtbmy8Z0_xCaeRCt5ksRjO71SUcif_EQWjoDJihx04mfJnafmkOjC3JaGlmq173dq00zdSSfItnjASvQVBujHp8gc4P3D6JV4UbpFX0PwNXPthRe8f0Sm7pxSTg5PXd-ZTnow7diNACe0G1zJtRE48u4T6XbeoOcuQxp9eLVeGGt1XziQ_gDjdr1vjo7gUYIeGHOOJncVLSkNQ2EhcRJIKoELlHubBchbCh3PnTPfkexCtaST5ZHwkHDtLABF8Y_RL0MEZ1Kfp_5AILQhW6J7lZoV5nPmjqcmBnQISdx0mNZB7z6Gjv4AXArUKz5PTQQpZo8_jvvwv2kSLfT7oHb597TKfVb35SO9bAVNvrLONm069Hdz6Hb9ToA0vmbklaD25P250_4UufnqxCs5L4xq_Y6WAOgavo3h6CnhC6wrMscxcs0owlr72Qw-xUaRkNyGOsHlfWpjSNtYxlru5iJLEXrbhTpZahMRsPNrqavdGM7a7b-sV91-3dSj2xquec_gUtNJguzfqQuDiHxSKxe2gk-7bEACtVP6LbMfvpgEBcnwc1fK2Hzq9CI4YiD4WIJiDSFcMCEtwiU3mYIfFVojsQiSLkxDZdKaBhiI-RCyH0dJQUWfolxqI-dvcdY-EHn0Aiq1fA96RA7ZA7ynMNDA7UZKXNQR2J3YZtDBh0Nidj7kzzvqoZudkTzlSsX3j0dAOqCMCymTQxV4ciInUhm_ckl3tJWlkSoFBAKzbuhV6LyszRwOg6_Ff6CcSIPxq72lonl8sv0xdp7N0ki-XgTZOJrHcrogP6YoLsWQp-qX-bX3XGQnE6t-ZbhL7CGmkWzDaYFJKiyPd1aQAwqL2hvD3enkcTcDmZiWB6d4DD0i7vpzxWNAlkXNDMWdL5Jx7ntiod7RmpZCu8sR2yjwNa4-mScGyfM9YOJ-No64jVC6ZjttFQd0v_e6U-6afg0WkK1X8falKz-sUr3LIAk4eQ9WXYa9wHDzYT8oK-eUZfSxCEeOGRf7x0vTR0wQUpiGB0ZrWyh3Xu3W6SVuqaH5riUmAtgK0Ajl6cuqq_qkSap4xe8tNqr2UNgeQV-TdddwdrgFSx6cih5fgk-TPIZIRALMLgnN_yYVh3ai_uDBpTO88ydJ8GyUga7O1wFFxpCnBmqrlLV-iPqSkjd_pY7QmU4sIqVaA3OPt9R9CLofVLermhEJf6CMKnWFxyvFrRZa9DWHpzwPy8lenzYchgReUnCQC-CAxz9drCKYEclAC7YbpBOsedXTL4IN1zFkLgfdg3Jppng71V8mD-6HiD-oOA0L-gR-C2Mwk_Ru9at4Sf3YtsDvQ4s5EEnem7vXsxCSCxy4d0DMOt1NIUquAFXVgcfv7XAdKnCS7Twr93PLR8VokCw7cmzqt-_MYNSyLOfVuwN0rtzVtzX2RLft7OTrx1aX8_cow7t_Pts2nPJDUgBt0iHy5E2Y3MOHQuw6ASwAvkHQnO4Xab8Cx4T3_BUCNv6S14oa4yRfzpY87pve0AW5ti4-15RBmh8dgnILX4DlMuR2DcWNGvXe8If2Js_Y3JTkb7Ll5OKFDoYmWwdq703uKYfDicf_t-H1rFk9bKO5EfEs31DiZ-aeh2o49v03HnsLcu6pmOKCZAyv0k3R9Lz8Zh7OSD91njWuNN13ZvXGloCWKQ==","format":"openai-responses-v1","id":"rs_0bfb3c7ab58c62390169b2c68f291481949f9ec52efb7e9f5a","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"’s","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" around","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":")","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Would","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" like","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" an","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" hourly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"7","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" forecast","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" as","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" well","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"?","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323918-z1CEmtfWaa660Z7L0E1y","object":"chat.completion.chunk","created":1773323918,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":229,"completion_tokens":201,"total_tokens":430,"cost":0.00229625,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00229625,"upstream_inference_prompt_cost":0.00028625,"upstream_inference_completions_cost":0.00201},"completion_tokens_details":{"reasoning_tokens":128,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 442.077542ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool.yaml deleted file mode 100644 index 9cf1bfa01..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 851 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323518-plPDxWnnTwChYQb9C1Tb\",\"object\":\"chat.completion\",\"created\":1773323518,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The task is: \\\"Add and multiply the number 2 and 3.\\\" I must always use both add and multiply at the same time.\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_80992294\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_16628166\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The task is: \\\"Add and multiply the number 2 and 3.\\\" I must always use both add and multiply at the same time.\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"nHog7k+gRgPFY6Lc31A0Ir0B1tWLi89UXKw/5yg/mcVsLWVQKo6wPmVzJCpcSbUuL9v9gRMGGckiRyKLWn+ukL5VOgM24XfISI7B8z+lDm24N50YZs2ikObJIBiCx9xIb8HxN9SI9q8Tl5tU/cXHTL4K8v3AZ227ntsc7bze2ziWpY7AWU3ZkjZDO5p+BmlbohOfVedZPYwJz60/zzMcfk1ow4+N0IhAl+WNLS9T8HpziWUMXJwh/ix5f0mqSDgxz0f3vhTve5faQFuxShhOVqFMt/PavRJj/xsjAA/Qq767teT4AGESJYcMGaQs8ksPllnX4+M7NNx4NXBwRd5e/R4MtVdzzxR6YKLeMbpnR51WI926HG36jkzxYCLfkUNO/NKf/CLzvpt7zJfaf5Z2SboaEUQvjd4NbVtDLWbnUGH+sanTlXZNt9eIRZhVukNY/wPLg4/lBb1hSUz6cvqDapyIqUDFAf0wxpUnH9Q7VPk8GFe7d/vyMsM1dYXeYHlt9NncNuCtobOftRcRSDwFTu4MLpUYvvsENyyh9nrWsqg2jVgxwbpiM42rOJMrDqndSuO4xxaPId6XcjpgKz6at+MElTMNSb2YjVxveBu2ls/wuhZ5PPN6r/A3IlLvz1JA0JDIMHvbG1ucTFTSKOKBhfF78hOuLE4REX4kTaMVhcdCf+F0bFgMgvlG5nhdNnsTO/WYZLRYKImEqZK2c2EAWFhM8BcrkeXNSbOTH7MC+1rbUmfo2C1AZoM1m03EefYBuA/mV/qMTBmZlOqseodfnoWdYPdl5JLU1x7be3MH6CmWGBwas4ETcaxIOWCr8aCXbM5KEU1VaM/PqXefgexsAeKGXVT7bjG2xsF/dBwMFfTf8Y+UvlosfSQ98pTHL1SDP58OW7ZqKtfpkK0y47mmzT5bZmV8f8yU8GGN7T3I5lQwN4LBBga17Y1bxbWLcI1qXSenar3xZIgyifUBV7mI0Z5m4PGoA5caewMzYwah1fGv1DtdGRCXGKTomzznhlNPj5omG2OJPmol8bu0ma2ELG3V0DehGpJZpyKOp1jTztOmApnnmPOhc2A7D0a2PYZVgJhHrqQE4V7ITdzWAZVhlg2+kzlWZ0iHJs0bwXBy6wbTqBWlIxdt23tTPxGUSKnAkH5MU13eh+sIEzoTd0UaUhWzDeBI///LL2bDDSby80ezHrzrL9YGSi+FWTGm1ZRlDYG8Q1Dwb187ogErjblibhQThzu0uVQ7dt841VidXD5Jo+jFu+ENFdzPOXaULeQRifq2hlPZei5cqv1dnvPgvzx5XMv9MDoUxCbpCcyvBCun/ksUVyCjsaR3Fdf7/uyYldgoQYQKqW7xUWL0481Zv8pL8scyVfUSlO8EL0R7+9FuTieFmYBaYxLsB4ph/gxU9wePPa6Gvw795lAC1qMH2+4rg8FJV4+ZnUMvkBQrqNeg5Fsw6ffGkeKROus2aqhif9NoBewOLcfqxJXktNyzERgI9ZGiX3u7t5yGPVBysSaAroRDvdeb4TrCU1pbFiDhET/e+w4DzhTUgpyYdUpJ/Ad8x7PY1wDWLbWuBz7ivliy8QfxS+4ZW9SWsOXLmZx/YOjr7BHg6fthUUdbvy4P8cO9SBawa3jwdAm6fSRo9N9mvSVXMsZuYFPYWxnX/HngOjkb+DnZS9RHBIUGdxzZI2JXTOF6GfZIYnq3yvHcvREPgLBuIqthdFbzXyA3mr0/NSn+vRAjkvjhutv6Ta3jffelaSNe84KRPgtzGrbrAiIhJsxUkiMFKwgfKbR3XcxJAd7C+y+T+7Ar+UDNyhMgjOQ/QOIlSvScwfZ61+QAVbNjIUuLfV4ieeHc3rDH08D69ORmpf4hu3TeRPrJliqYOblG5OECFc87uH0kydU1TH0z0RzF1N3OS512nY1+IrckcuR8Omr+Nqn5443zfTQe16Fa+D3kbUQ8qwgZzTqRPRtz3Nosfl+mYtx83DZT7p2g9kuefR4\",\"format\":\"xai-responses-v1\",\"id\":\"rs_6f2f166f-859d-4bd6-375d-61b6a1838ddb\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":479,\"completion_tokens\":420,\"total_tokens\":899,\"cost\":0.00069124,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00069124,\"upstream_inference_prompt_cost\":0.00006124,\"upstream_inference_completions_cost\":0.00063},\"completion_tokens_details\":{\"reasoning_tokens\":352,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 802.955083ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1289 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_80992294","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_16628166","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_80992294","role":"tool"},{"content":"6","tool_call_id":"call_16628166","role":"tool"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323521-gWiUtkr5VTDPfNPqfR5K\",\"object\":\"chat.completion\",\"created\":1773323521,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5. The product of 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":\"First, the user asked to \\\"Add and multiply the number 2 and 3\\\".\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked to \\\"Add and multiply the number 2 and 3\\\".\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"IrXtd5jFof97P5ob4xn2YrYjyXssyxLS0p5vVxF6zlF+cyH0GMBNARjEiMDwBr/s0YgXTI6AKwEEOVNpMnVHOg717VL7lg+yAju/O+cHGvlTXnFcNwf2uakhS2w4aMiGL4Us3nQTFxlrDWvSBJX6GCgzYy/ZvYU44wzjthgOyeLEdUcSbPVAGkWH8D6T4aR0vbaFBrPcZBJ+rwSi6ja3SmCR3SbEM6eLMMCODdij0lkdhVdcZ2UvEVdW1txAq4HHBxtThrRuSXumz8e7kxuLNRVKph1g3OEObOZKn0QCOwK9QamOK0EE8yLmrovZGjKkx1DQ8o0bATRRaRjk24hVn/44djfriDGzAuz4Hb3T5fiGpn5MqfABUIlz6iNKEZOQLphZKvufvXnRrUTmp5zbuXIxMe0PppExsmtDDIPVIKXsxHw//NfQRSV/vbUcBijRtWKu+3nbPgWHE6bONGVw3TDTqtCd09LJvGkm2eTQJJxgm8ODuivfjJKhQyml8YVemJsQ9MekJb/DrOblnW2L8pOi1QmiidRL//OYZbwPpBwTGdiHk45L24f9V3bJrH7D9RIMyI1VgsWurm41hbgywhiHuLsCdasgWAipHmSL7EMW2CmoS/1K5zKnF+2KYgS67eH+I6j2g6W6v2Ca9JpJCLlFCsxKt9TwRW0iHMyh/azpnQXJ6jpjgmPkQp8uuVrEJ9tFJp7J1hSePcMk1ztFZGXeYwmfzf/IftmSKDEfub2pGxwY66GOY55xYIQOJeXx4xUX/xPKL0ZVqqKOu1LEdtgm3YEUlnnvyyK1WywgLHtjMYSFQdBR5OPjZthBQOzyfuYDhv2vnCcqmtGM0irfT2F5qQPMC2Qz5gPu4OaUaABuzwOd0D41XYjS/1KWF89tTYbPlvJ2F/dx1TE7HMic4MkvEQ6LLzcyoe4i+zM0Cf6/QSjMQvZUyzFNbFtT/D6y2AVrtcvdG1JI8D++1LbHGxjJ9G+wZZkD2xkkHBjvga52R10md//lULJsQbAKvah/JO+WQd0XI5pSNFkH/hcIIILRR3JlRymrmwinVWwCtuu64gbo6JQz6I6BnG3scE4IpdlgZFdCGmP16W60sUJyHVHZ8aRVvOoVDC/Mr0May5mqchEBR/yB04SQzHKfI/c5Ntkm4KBimeFPLYbQ6edaKOY2UhB7QBmU\",\"format\":\"xai-responses-v1\",\"id\":\"rs_a4466668-a0a4-9577-82a0-f60e1844ba8b\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":564,\"completion_tokens\":225,\"total_tokens\":789,\"cost\":0.00041574,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00041574,\"upstream_inference_prompt_cost\":0.00007824,\"upstream_inference_completions_cost\":0.0003375},\"completion_tokens_details\":{\"reasoning_tokens\":201,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.637102708s diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool_streaming.yaml deleted file mode 100644 index 5a9075005..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/multi_tool_streaming.yaml +++ /dev/null @@ -1,273 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 888 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.summary","summary":" The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" system","reasoning_details":[{"type":"reasoning.summary","summary":" system","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" prompt","reasoning_details":[{"type":"reasoning.summary","summary":" prompt","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.summary","summary":" says","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Always","reasoning_details":[{"type":"reasoning.summary","summary":"Always","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.summary","summary":" at","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.summary","summary":" same","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\"\n","reasoning_details":[{"type":"reasoning.summary","summary":".\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"zFCSTMl4u3ImlkN5nZCC7NpB9eZGgUww1k8qERmidIqo/Kl7l/P9Av+PP7XjZ7MI4Wcans4j0fmPrZ8AVfbznufPg9mP6IhjWuT80h5P8Ghhffq58gf7UNcQbOLJDq4qNgsM93BIMqGhUQVmOgpLlDq+0qK5x9Ki1aUrAjlpwwN/pokCTUoXAlhgrm0P1c5oRml8PS5/DH2bGE9FZT2oSCnH6ZxbKWk1IMAAerjhwTypU6cRe02/V5RPkF4zUfZxzHUHkEBJSkpaSgscwbHwRfeU4qJXOoagRKSsCmdGybQL3ZmXur6FV+Hx0BJUY1bhwnkj5Y71mpJB2YiWxQBsI25/6C+3AKzBhXGS5p2Kz0NPeWKWpQW/3A29Lg1ndgQomAtNGSc3hYFwzS2Jjwtq/g84E7NktADpYCr66Y3ee1nQCfeNnfrMwrrn9GPrOfHLjBZbvDMGHnh5yxNvtzMoYuGuT843znbu0zqZlwXpcfbV4RaRnjfgkFAumA3TNM0Hu7kwPyIVSm6G+8gh1mnZGoNMnYogXwreUF9uNtJH/ol68tUXw/YPaV4w4RKqg2J830Rr5pTlMfJTG5M2IffCxcfqkRBu0qgcMHoZWO2Oe1FJmbBl413TFzNcGHI932QfnoUouw4l8ICef8eIm917OzieJAan8JTvb0hCswovD3p2tGXHtrH9oBUehwpmn9amUNWofmwJOcTyhgfhmSJCUTUVXQ6aJl7JrDEOyVQDZuFQgtU016KQPAT96vnyvFhWAtqpNoJp/2XQz/bQjppTF9MzB8olveUG2NyHJUFOXfI/nbcY2VqLIKTTpwqw2xW2I5CA4OF/vDZj26WhGjE3iYE6zWKSdmBxzAu86UR1F/joeuGEX6WxBaAufF63/WXOOI2Tl8pf+X/AeGdg1rjRB53jDqPAH8YkHgCiijaqzxFBTt7ppmTwQkf2iISgmDX5RlaF5na4FNxDBa/8OmZH2+kEU1/l7T524QwkQn5OkxuzwL+5MM+Gl7cz+WFlUPDT6mCyBsRlcgoCU9Xs4f2kEPpq8UDKPtxou8RHuS/TstWio8fKRbD0cqrHUICKhFe7O96gGJT9POrSj8lgDdLbHvkC/HP04jH/fsdx8WFkY8XESWQbjAxIHxlsPpXMZpzlNQFT2RMvnMMHKnraVMqJKR2Z288ivV0AVbfJdGZW6Mm0bbE4Wem7BtPD3FHOAE1hP7kT3n2IG5EcxGZY3ToyTYo+H1VQ","format":"xai-responses-v1","id":"rs_abee0330-3314-8aa4-328d-160d6330fcc4","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_24685106","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_09709929","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323524-sZIRQMKFNrl4kslO0v1w","object":"chat.completion.chunk","created":1773323524,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":475,"completion_tokens":300,"total_tokens":775,"cost":0.00051044,"is_byok":false,"prompt_tokens_details":{"cached_tokens":192,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00051044,"upstream_inference_prompt_cost":0.00006044,"upstream_inference_completions_cost":0.00045},"completion_tokens_details":{"reasoning_tokens":232,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 797.091417ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1475 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_24685106","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_09709929","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked to \"Add and multiply the number 2 and 3\". The system prompt says: \"Always use both add and multiply at the same time.\"\n","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_24685106","role":"tool"},{"content":"6","tool_call_id":"call_09709929","role":"tool"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.summary","summary":" The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" system","reasoning_details":[{"type":"reasoning.summary","summary":" system","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" prompt","reasoning_details":[{"type":"reasoning.summary","summary":" prompt","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.summary","summary":" says","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Always","reasoning_details":[{"type":"reasoning.summary","summary":"Always","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.summary","summary":" at","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.summary","summary":" same","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\"\n","reasoning_details":[{"type":"reasoning.summary","summary":".\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"VYx0N6GsXnP/om2DGtABPxLQ+/GMeW6t+A+hGu73hWOJhdtZMGB+gNUqVMZjHyluwvpUstPS8BwsjX/SmFADG2H8a5+wJ5JZQxqqKNJedoYA+2lYBzECJEtokIWLsuG3SQ+fL3gnGfogOyfoDaEcCnX7smiIIku/9rhh7Bqb+1Xt1TPuJo1C1sZ6CTHHDCmtC56eBpnhXuRhuGEHF/bIkLJP8vWmQAL6uYCC0oONY572Jc9TJaagM6ndoihGvJAmkoXYcZCVZ1ryeHhs0zVq14ZIxnnMYYGjDDuTuZEQTsx0chDHOUyiAcGTzWcuYY9NCq4qkI0OfOsekmAFKAT/Msnrd3wFY/MC109Eyh8Fht4IVGcJI9xNcoCVNl1t/+7FwffDafL6XdRbPDFONroTOkfYidrtb9dU0vWow++48CnaQCuxN6x7THD53Rf95j9k1sR9W9hcJJCoUpZG4obcEry7RFHRZtxNj14MglIdIwMsZ+7lyzQzGSsd/fyBFk3gMzfZLPMILbeDcoX5TY6X1Q3/0hIls5TJuhQ5du2TzyMj0JNT+mCRwsknFb07fHSb/sEwXnrKgXsU15caUjpWLCztJ0Nh+Id12lGUcUCYT9ZNeFxkfPHS0N0IeJtWTQTB/aPJ+Ch7PVJxPWxgTsBiVnLza3lOQ+2DfT6bm3jdsXVzWa9GDsEkmNOSSno1gt+EJFnLaORAAPrcltKOC3iLJkH8NxisG61NmQRYeEGTUxU9QexFJWMD/V6BUes0epkPosJHbjOqFPsKy8M5BKIgaC90RgjWOaFHErZeYx95UmPl/46JKnVd37M2t2FSWWAALxK+12mJX/BtakbVW8Rm+oF72LeKfSdlphR1h4xnsSKj4/hviF8JrSL/G+wQ37M5+nhmHEKE1m2hTB//i93bMhiOnqxaT2uBqFdqMHUgj/CoLBsH2h9rWR1kHrK3MG4UrV9Gbqu25UnK/wKvYqagpHrESbVt21Z2UYUQN76tL7UIXjpacE7SyvWyw+KfGF5mDK1rqpGm93aJfWacNww5xIYkpfHi0CXVXJTivjem4P7YS82kzQDKnbvME4p3RA","format":"xai-responses-v1","id":"rs_91703a06-dde9-c749-1534-232d8490ae08","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" sum","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" product","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323527-Cdk50FQYRIyjzJj9MMWH","object":"chat.completion.chunk","created":1773323527,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":560,"completion_tokens":200,"total_tokens":760,"cost":0.00037744,"is_byok":false,"prompt_tokens_details":{"cached_tokens":192,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00037744,"upstream_inference_prompt_cost":0.00007744,"upstream_inference_completions_cost":0.0003},"completion_tokens_details":{"reasoning_tokens":176,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 661.626208ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple.yaml deleted file mode 100644 index d5d375fcb..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 196 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323500-nF7twYYeGLtDW7HtZOIm\",\"object\":\"chat.completion\",\"created\":1773323500,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! (That's \\\"hi\\\" in Portuguese.)\",\"refusal\":null,\"reasoning\":\"First, the user said: \\\"Say hi in Portuguese.\\\" This is a simple request. I need to respond as a helpful assistant.\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user said: \\\"Say hi in Portuguese.\\\" This is a simple request. I need to respond as a helpful assistant.\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"xfBMdNJZIgC4PLGqRkEwMBRi6Lc12yr0dZFmlhE5Pgsf7MDzm1/p9MT5MHbpP/nMzZaaWfwFCPhgBIZ/1hzhwkO5Sa+bX/mFnyRAiwvUKqJvyKJmxjH7aEl9Zg1ItUR9SoWEMk6DtKNmh2Q930alvhwrGVSSqPHr1lmombPzepnEx5T3EW7pnOXGMHZGRXXaPQ0TqzaRAaV7DZPyyS4k/SjTgkHBVIx4mdWZrfTZacIewtsJ4NH7QkAB9L67iwLmsILAnmIio1AUEZXRH2jFt340d+M0Qz8Qb5WbfUpp8BE4ZS19m4IsGU9iDp9NCcUTIeyuA3sRrLBM3CjZz8xsDVUHDbUWSMdPigaf055XFWktVXKzRW4ed81KEHjf+fU82mf3Jble+2IrB7WcyZ8jB2gFd9MsaeAa2CQKjB5ZwZ8v5Dk6n3vEZZNjvJ77WrZJh/qbk0bOgIxxWpnj6BRjD6TtYpqw76HzujNmdmlTbmMokv5725X9hzPoze4x8Es7V0ZXYIN5jY7Uj8r2SeMU1YnezCihx/IK9qqQSaMgPYXeHAushvbjwd4ocKQinLgyqlgnqpD9KcnblM4pslv6ycM9aWjXRwK2ddC0t8CiGCcuRZ9rxg7VEPHS6VVdBfE6Ip289EBXi5yj2jwb+5YB/IyN2ppupcj5nVoFxjR9HQHhPspLimQPrHuNk2C/2i3F9nSOt1ZqNa96Dx5T4q4CjdfVRq6zcEiBeTpAF4rr1Vh4MNl8zeGzLoOMrjfao0V56hmCEH8s0TZJOwjJ6dMt8tuYnTjPBaWcrFp99PKYVsim7G/zesRQliXdqNqayaJ6u8EyA+tNB/DUaz3DDm4PemPWw85ZssyBxsYx77ReyrtwilvxcXQfFSTqN/zpbUE1xUoprO4y+iFkoRI+k7tjd8rIqmTJGTvXreAfKVV0A8Mpzj0g5x0AhfpB\",\"format\":\"xai-responses-v1\",\"id\":\"rs_df0febbd-3149-9d1d-b8bd-2b796fea6488\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":213,\"completion_tokens\":174,\"total_tokens\":387,\"cost\":0.00026904,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00026904,\"upstream_inference_prompt_cost\":0.00000804,\"upstream_inference_completions_cost\":0.000261},\"completion_tokens_details\":{\"reasoning_tokens\":164,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.001425917s diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple_streaming.yaml deleted file mode 100644 index aa0c4c3fe..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/simple_streaming.yaml +++ /dev/null @@ -1,150 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 250 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" said","reasoning_details":[{"type":"reasoning.summary","summary":" said","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Say","reasoning_details":[{"type":"reasoning.summary","summary":"Say","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi","reasoning_details":[{"type":"reasoning.summary","summary":" hi","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.summary","summary":" Portuguese","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.summary","summary":" This","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" straightforward","reasoning_details":[{"type":"reasoning.summary","summary":" straightforward","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" request","reasoning_details":[{"type":"reasoning.summary","summary":" request","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" respond","reasoning_details":[{"type":"reasoning.summary","summary":" respond","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" help","reasoning_details":[{"type":"reasoning.summary","summary":" help","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"fully","reasoning_details":[{"type":"reasoning.summary","summary":"fully","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.summary","summary":" as","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.summary","summary":" helpful","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assistant","reasoning_details":[{"type":"reasoning.summary","summary":" assistant","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"8fopb22xFHgGfz0zv62orVTO6jMBz01Mfp6kEycJDH4ii1TIjEY14IwUwGYdakrXwvYrG6awrkGEDFv7bqN2OsWGZz28a2BLCSJHwd/HGUdzqg6lMf5W3GOR1bmOPxcjD2gv7u3n4onNaSqtBrwDezYpYKqsSVOss/CkX1RDOHSL8k4OaHbe0xwMXqFcJHVPdRK+CUxgf5/cutH61l5hMlhZZHG/nvbG7b5jAUC6ZzZITTG3LBbalcnHPE4K0OxDwL3fE/7rnJQdSPVlR9vKhVahgTviO6UER/ZTSFRxRK04wlOZlPjRrgd4Xo42U0F+1XOjzuGZ5KBQgNzaXlpzh3YzZ0ypuAflLo54rfDRRkx/q42dofxVG9hr9Kpwriq3siB+CckkGGJFwsIZqLpim6idVbQ5LgTMcSuexaNw32ne/iNfiL7D5kjNieeQXqGQMeaOHfD0itc8ysT0hVdPJQ7JVn6Tjj217AytF0UvLtcRPLg8lWCvat2EpTyDA4D6KMYxwiWFuET0DUmdWsEBCStE8ANiFNXyacuttkxNI+HEDTQQ06ODf3YZ5MYSzyTxDoALKuRHG1AROTqVmAuDa6zX6yr203fNJpbMe6qpeudZ5rgsg7Wka0x92zgHPXmoaGD1OBkNXL4qKQJ1uEHaETSNtEC0y5fwl66fQG2tVm+cikSRcemclLbZEJPWHV71XTXfav++UrBHnCwCN4UoXdywkkDA8oUFMurLMuOboHpIMQPCrEYTZtcE4YrSftTI90Uj4AaYEZ1QuOt1dwPhM/ypbDOCpYmNrtUETfb5xnG1BnTMve1GRdSeb1akF6NV+9PmUF/5hy4XQ0OoOk6g8lmnxoV933c1Zhg5TagpyK+b2PKut0UA4zkxMZFWQngZZpNCyTtGKzosu22mKyAdbpAuWZiMK0RLrCiFPYnkWtXxQJtUU5PPxhclFsrdHYBWy2iaWUC6QJmLMG3wNlC+P3LRgchcsggEF8wxAvh4l+f7u8hDXOCqktag1YfsCZ2WpRR151T+/5gKQ7IhRAztzo7RaYeENzbrg87rcUGKxxPwa6DpSGFJESyVocuodUIHpuasPZqCnnLEn4khkz8LORe35LcYSidmhq2ISbOEV8yrHyekrTNjkTmn8D+7h+V9HIIbK/qWiesugsqGp99lkMAW5Vq/3YA3ZVaAK9c5ycaucgIYcuGFN9N0G9l37boloAJRg18tP1N/8eQ+lNYDy3MV9xEYxNqJlZQmH7p+8JvAs93LF2HVhQbRYH3cYt96Sad3aVMJJASuiDutUv6r1UiGqxH55OcTzPLt+AWLATP2452cdOKaEKrnETXSBks9ePi5lg/9D875b4uC+psiIbkw5B8AQAPgRU7neLTEOmTCvuz2DgvaYICCiO5Z1ApobSSbXDyx4X8+oT9K3+cYIqu5NqNqOUmNs6n/JK0G5B8lg5Q0TuUhdGKsUyVtM1J2bglHr0DTG2YCcj3L3FUPF3+7Tfz62E00ff9PUvbN7w2AamieBZXB9s/TBwdeMrPECPTTnjXhp972qGNKZCHw5miTeB0UsVhk","format":"xai-responses-v1","id":"rs_f2b7ab90-b7a3-1467-861d-01e13aa7405b","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"That's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"hi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Portuguese","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" –","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" informal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" friendly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":".)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" you'd","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" like","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" more","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" formal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" version","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" it's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"Olá","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"\".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323503-j1LQxNDjdMimPhtNgur0","object":"chat.completion.chunk","created":1773323503,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":213,"completion_tokens":290,"total_tokens":503,"cost":0.00044304,"is_byok":false,"prompt_tokens_details":{"cached_tokens":192,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00044304,"upstream_inference_prompt_cost":0.00000804,"upstream_inference_completions_cost":0.000435},"completion_tokens_details":{"reasoning_tokens":264,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 761.722125ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool.yaml deleted file mode 100644 index 1a374d201..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 488 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323508-16TGTlzkgBp81nQYpa30\",\"object\":\"chat.completion\",\"created\":1773323508,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user asked: \\\"What's the weather in Florence,Italy?\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_91915262\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence,Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user asked: \\\"What's the weather in Florence,Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"ENvCWZ9yjx7RuE5dTZ8WqwDG7rwo8AH40p2hMurQkkrXLmHRpsTEUJrDPvnrnGVlSX61+UgbA8vLorWs0NsY1eL6YfoDjKh9E2kXL/bCsblyetZN53WtshsNXl33NBE9pkWOjCg6eRntcac1EwKK+EQubLerHuv6it471jkDgh6q3vMxIw5X3F4w2JJ8roUNtfVoLRNZ0fSclOIZM8FRFlEYhcmW4Jj5/q1F8Jog3jvpD6o/qQVkc+zqatkCwVxkq2xwrGnpodFGSLHBD6TvYyJHQh6f+Nhyi952XTrmxsmuu/QDOMNwRMugvymgMYUKCO7kgTFEg4KLF2mntRfkJywUc6joTGh7EMPGE/IbNV5+oZEX+2rLrwE0T/dtF8e9pdd7La6y8iPV9UPpDyllmAERID4cZqkdVcLgZgzPYVyxHGJggByV7wiWHhRMXBK1eBZzYM5iE3/7nR7VJ0gu6NhmWCwhywS3eTzuiWVAbb0R//ipsc1/y32YUet7osbbop1hgwKp+ljkjyLSsiJxPXzliIwCHqNx4PyfoKk/+28+CKO/Cho87h+Vx8V/8hHaMX01QeLngGuMjbr5Jk70Uqpkj+XzmthW1POr1l2AgFkvWL8bACXokMvo/pI3wYXn86Qpy30I3G3txxnfN0Gd9ehoOh/GHiswXZPF5EW6aCZEASdk12flHLtVv+41uyXnBFcTfZ00x0goblN9nbPl66SE/rAGuriTnyOraMLGAwFerjoxxHs8T7bpGWT+6pm5fzDBZizK3zyHodPY91c\",\"format\":\"xai-responses-v1\",\"id\":\"rs_76d6576c-5d7a-91ba-9422-bd7f598344f9\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":395,\"completion_tokens\":161,\"total_tokens\":556,\"cost\":0.00028594,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00028594,\"upstream_inference_prompt_cost\":0.00004444,\"upstream_inference_completions_cost\":0.0002415},\"completion_tokens_details\":{\"reasoning_tokens\":135,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.583899875s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 784 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_91915262","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_91915262","role":"tool"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323511-wxBLDmlNIzihPZPsAYWt\",\"object\":\"chat.completion\",\"created\":1773323511,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy, shows a temperature of 40°C. For more details like humidity, wind, or forecasts, let me know!\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"What's the weather in Florence,Italy?\\\"\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"What's the weather in Florence,Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"f8BhIczJVu/AvyzDlOjrE5Vb4Z/x0ZrQJ5i1okZkgl5fKbHYgNAuGEw9HAgS4vnFtbMBiKyEi1Y1VxQyFEdj833auBSYTd7ZAlCYitFSpLHHkSD5L1RCa8IaZeX9vCl+ArI7dEix6UgLBR7q1HJbGlvK3oDU2Hp8h/O6WCqKrstle9am20OW7qewmgTyNxSD0452PWUIrG9ZHtev3KvaHPpt35BRuwwHyJqjd/Iel5FXufzTSrQVVggWPJ6mi4DZgIn+h60S0H7Z1EyidBiILQtfz5uH0zPhGHhUSaS6P+D0FIqHEBGIg5OAmscr/6mxMLeeo6nxw6YfW2nH5K5UhzTn3PRvsRtOADioKMnIGgUPYhvFTv+MAgD7J4yl9j95lbIyZjpGKyNdCweA9PqkWMBligt36b8FhenARv3fbfjRgbJBSy7jpnMo0WQ6CW0MglG706d18XCvl70YV1f6g3RB1B/PoiREZsVY0+r6YwpNfKmioMR+LcTaWS/lL4gbi2MjQjDu001c+474KRzKSviKJng8kJNseFTZnH/9sSEpw0EiC0cgkNI7LI1Z44T1m7TXViFpeFzYNs9kEJ67G9iRecGnoXtbppYfNZ5khgNkmZ2BV8939yj1wKCvRbyz8sDkNxxWmNRNDhsGJJD/ioOqtw+qrIWLpWGI0BrBL8Eatb+R5SCf6zonHDm215CuPAwQBFkwqpxkzqjTRwC7VuPNQna7TwIWKiwprmLLs5pEgLmk8d2AA9xwRrSluk0\",\"format\":\"xai-responses-v1\",\"id\":\"rs_1326677c-fda5-bf5e-521b-f086d2ceb2f0\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":433,\"completion_tokens\":148,\"total_tokens\":581,\"cost\":0.00027404,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00027404,\"upstream_inference_prompt_cost\":0.00005204,\"upstream_inference_completions_cost\":0.000222},\"completion_tokens_details\":{\"reasoning_tokens\":117,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.227629542s diff --git a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool_streaming.yaml deleted file mode 100644 index 1adf641dc..000000000 --- a/providertests/testdata/TestOpenRouterCommon/grok-code-fast-1/tool_streaming.yaml +++ /dev/null @@ -1,187 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 542 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.summary","summary":"Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"1u5ieO5zPrt6b1AOgcUcdcB2J/YX2xuUm3F7C8lDAenbRTmKXYhGetkDTtCQkhEoKoJ1QtvSwfQN1ynQoFWiJLPYZEsEPsJDw58gvdgQSLNPCLUh8nsr4x1uRQCAeJv3vmLAS2mSuLkVvZLSxCLmLt4kmtV++PCFgUT6hLDqGD+eWaeMcVIcPFrwN5TLyPANVg2y9CeKryZeZlQh9t1H4RArkp18ZqpXJHr4Xs5Vlq/AODaRSLzMKCw72UTH4wyz8uOSpkRCFfiCrmdxiYWWmFQDqonoToY7Q9q7uw+JWyM7rDk0ITlrHTtMYLYdKubl627px16HZoIq1q4Yu6a+lHzjSUpk7EHYSrMaz1XYM/sLhAv5WItNadtb5eFaPOvjIkpH/FVkxbuh0DpOGTEgG6mK6rlLK6SUUZer3IqJGuHi2gek5MNdmrEpXRBRGo58QD11zLYADtoRO30pZXrivydme7QHRZp6rCHt8yn/xkcuaKp+7lni4wPzidObHXv3b0xzDFC2KWxTs9SVp9wJeNgcd+xIlorlk++IXO8cmg78r+n13SskxbcOJmvJZ6WJ7v+aKaBqwOfzcMwmkfOKvrZkbHhesy4gq1g122MHVA0o05aXICySE9j9jipbrgLIVhouXLmPB9bGvWKhpk+Or0zd5RXGCrThfe/GoLh4zDk","format":"xai-responses-v1","id":"rs_5cac3117-5080-15da-b46f-051a923d7236","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_98634134","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323513-heRhsfFVW4GsI5oiCDMd","object":"chat.completion.chunk","created":1773323513,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":395,"completion_tokens":132,"total_tokens":527,"cost":0.00020788,"is_byok":false,"prompt_tokens_details":{"cached_tokens":384,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00020788,"upstream_inference_prompt_cost":0.00000988,"upstream_inference_completions_cost":0.000198},"completion_tokens_details":{"reasoning_tokens":106,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 786.196209ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 907 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_98634134","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked: \"What''s the weather in Florence,Italy?\"\n","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_98634134","role":"tool"}],"model":"x-ai/grok-code-fast-1","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.summary","summary":"Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"27mByodwk/M4q13L1MoFn0cscWIOYQkfOij/CD8Xi/wcUI3k6CVWz0849ta8eK20+VPBrc0s9vZrWyuuShdJnJ+PkKsHZh9OCF5/6+LctqTB0k2THxyKgdBkonWm0y20PojCZr2DM3rSJfJe354stGIRkMnvkGsXzt1M13DMcUsuvRPGiAxDvroc6ohQxi50M1yBODkJ25X6P5uRs31QsDxpiiC49WWT/T+yEg/2RACR0pHIKzcc87gOx4/fyYEAatb55Act4iPFTrEmQyzu40lBhVOGs7W9rtTml40WD/RPxfn5uOeDvQaQ3QVHrcFsJqi41+qUBDI2xcOYPawpWsHiSsoNC8f1nqtls6VHxhb9qeYxDxPl4SK9/yu7bo9UqlrLFqv5Vd0mBw8OVdHl74cv2rhCGMkTgFoMzdEBOaKkpjSk5Yh9TS8NjhUwAaIoa8Z82TAn7/K3b9o4T3zL9aCdafGtnzMMDJ29gWT+uE9PQnMHTlv3z7LKoiV3EgXNwRJ0k92CTJ9CpLxrltfphL3pH1KqedaRvkwFNmo1Ga5GmkYSbKJpfI6dPhMWzDG2rMAPv26I/VLYG/0vfq5DRnYJrToBpwjM4YvvcKGl4W9/k1MfMOnQPaPM0vDlRhZsvnQWxfvCqBijr56N0bVQGBgWSxIakZ0LGLTnFJpJLMqWO9cjLh6wGaC8R3w7Jn6u3yfmWTtBVpWLOO9VbCt1CUUA+8b5NPNpxJXz/nMyfVLj8vYuYtHPW5Ha4oGwd1ExWtw5kzDAeXOW7cuEmuIwhxbnNpxh4weB1zdYPzAwx3qBs5Gl1PLZB0sXbsG+aQuxgCHaB+x44j0pyCu1A7Ghq5OmauGc7l8V5Y9/hqqIo9IX9+PNsmfiONUADan0EhjsBcta/NM6hDH3AK8EYN2UgQ","format":"xai-responses-v1","id":"rs_10d65e32-7467-b275-4d1f-6572283c68e3","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" temperature","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" For","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" more","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" detailed","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" information","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" feel","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" free","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ask","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773323515-J7ROgkSK5s3AYrJDN6QB","object":"chat.completion.chunk","created":1773323515,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":433,"completion_tokens":161,"total_tokens":594,"cost":0.00025898,"is_byok":false,"prompt_tokens_details":{"cached_tokens":384,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00025898,"upstream_inference_prompt_cost":0.00001748,"upstream_inference_completions_cost":0.0002415},"completion_tokens_details":{"reasoning_tokens":137,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 572.959333ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml new file mode 100644 index 000000000..6d312853b --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 848 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945429-HqNzdx2lG2DpJ0hl21vR\",\"object\":\"chat.completion\",\"created\":1773945429,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_88778671\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_70883996\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"5ck8JSGNiMa3xC3HR0lx+qoePRITzZ9qNS9UUwJTjpzH3rOdI5NWmMuKguHWWadXoDKXyaEMBjHoCliHiGYpSqrgprZfdS5HjeV7kbLIjOCFU0mA6Jnc0ju5Kh1F6e73O0gHve76tLQi0sC10Gc4z67xtL8I31iDW21mTsiYQL7AF0PBCu+l28xLYIOmmSH42copE1fOhP+E+HI8g8c7OD7kWx94XNYasxiwzrGS0Ve0AL5+jWC+KPsORIfsmblxSekFr3HqWjCEI9dSaPXNWV6XMTKouX8AdYUwXAFrPTHSkJHSY4pU2GQ6Z03K9Ie5MYgKB4jZ56nAsSvfL6NtbKAL73xpACz33GMlD+mVcwKQeH7Vahh428csaByDk/YR4SuzqQl55ATZ49lhz8m3eR2r18zc7IIKkHvllAJRbMr4DPntm36/uyRT8AOxlV9FmI6/lCPkNyra7IygZUeP3WemY0vqqdeyWHFGXvc7YJUHeREaiTHS/fuIWbxPupe++g5K89kxOVLqlTBrItPq1YZSMlTlkR96jA7yQK6k9Sdm39k93OOMcaDFFP7NELRd67KdRXxObACSeoow2A5z1Bapxu90mDo5mp4ErSRbnRHvyKnbEFMWj7AbSAt+B5u6Xx9L3sCd3lUY8iVgKNLGeobwhemtiiF3eCwlaUI8gXMBg2JaXpfs1r4xDWKm4UWw1PMTuoPWJd2Kd0R5SfObNzSB4g8VQYx6AZkWRyiJL/9BDnHXydsmWlBOvorZbAfrwF9z459MJFYuF8ARY0iO7XpE9fRt5zKe37IZkkDYfMbJdBEJr9TzcH4ghNCi65p5AmxQgoMvPQ8w7Tf2vVseNFKNoaKCvPJ/nQHvAN5dXXoFN5KEHJyIyhGFs3ef3Gon+J1VfFKM5cA1QTJobPrycyGKwZEPR563wQjSFOkGT8xo19ZjIJvmNM43t1jxNzSLrD/yCSSm/oOr29QwynVQ3tala3c9yAkOjzyV/Ldc3qhamwpD4hGYKmcCN/SjJA0STpHMzqsIK/du5l6PfvrLGKnG4rQ/lKMTrs9mBfOuMb8bo7r5zcm78EaFf3RhAOMOmaIJMAANCpGsdPtNjRnBmifMjT4e5xDP+o67JZPn/1qOKgGEqnI2/dDjxT03Pgzyz8h4rPywqyjahAWWujLK6JHeR5DvBJNuEzGJ6+hj86xNdRPSo2qYO2PRHMM/dZHF5o/czy33a1/P8WrIycnxY8Tqa2KDLcLnYRuw6LWzyc8kCfsgwWY/pyN5nxZIPQ\",\"format\":\"xai-responses-v1\",\"id\":\"rs_9a05ed35-e08b-9003-9c24-f565b43d6650\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":445,\"completion_tokens\":287,\"total_tokens\":732,\"cost\":0.00021,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":150,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00021,\"upstream_inference_prompt_cost\":0.0000665,\"upstream_inference_completions_cost\":0.0001435},\"completion_tokens_details\":{\"reasoning_tokens\":219,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 882.896709ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1286 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_88778671","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_70883996","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_88778671","role":"tool"},{"content":"6","tool_call_id":"call_70883996","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945432-ZKbNSezkoXvlIlI9OdTh\",\"object\":\"chat.completion\",\"created\":1773945432,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"2 + 3 = 5 \\n2 × 3 = 6\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\".\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\".\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"5DBCHTvIsCX8YdloJoo4OiMBG5f06VasTtZ2kj1gLqwJ8fcq4Lc+lVRh1fah4nhqjQyLgD5/g+/488IYanax8KZZg/uegCP51vpzJHfHBogVZgm04BW8uDSVQzY6MRUZiMZeRxJGvIHpI1LKLyey33+n9KuawH/bLeOSmsotJGRKjgBOchv5gBUf9Z2XKc6qwHslKmkRwpdwAgPCWqDqvcS1mt2mDGYiIaX/M9xDUhyPZUSDBaEdsjCDwVH91H2Uz98YMQZGrjHaSZ049GUU2sLDvSnbuRODnMv9PbA8n9jI3Dm+mvRw+MrV1bsCq2l0jdEyemNGa+v20LywqdpGJDCDgHHFEIJLM11swcTEV5ONy27Je2tesV9wIrhsITQIcXwsDFyfZEOQ+nQ920OHUapKMk11lx+syFI6Qg37WvSUWCkUvXaRgajS61w+kG3h+oZ2/ftiy4oh1FCmaPVmnBUeaACiRFq7xJwEBvF8GyKEEZ40Jads8Ymd8khv9P51rZC4BNQv9c8qaLt1zIDC6d5g8Vr4LhS/4yOt/wO0hc8YZoVoMAymYUgdZRWnQGSYToWk5KEwbbzAmuQ85c2ZEHGwHPd/TBr3rlxge1PdqAnHdgRsZ8sF3yfjP8J4skDSFHuP+qnYjeTHY1ltWWsnVt3gCioZ5jKgzF1dBvNhvuhcCku9cfil5AcIk1HrU9FhuTrEeQpVv7/8WCyEOvRCGBMilvrB0oYQksa7PC59vJkNO/ND+SqwC4XNuhfldW6jvBfVL39o3btastoOVi+0KN0D+aANNap2fKwvbSjbhZUsFgcpGwu+w+Ln9NXPO0Z0JCCmzucVnmrWi/WHJvcKTqh3ESMlzlyni55RBch1+/AyjrVakFTFbdnJppkT/WTVZ0X4Jr+n6Xs7aYGEBmxfQ/s8smt6ZeAyZvgy6istmS13V00qe+QurURg19rbPC0N+JTjOQieYhIEWEHlJ+9uswz4KWbaz9lVPI0f9IglAL3vovnVXHiDeCrjEsf48+sckqlA/CX94QU/Mh+LKZLy0bEsg26PGdZqzDJYdqRrmbxxZ9cHbykuhp0OosDPd+hGOa8S83kw+hxoaKFx+T0o8Bpsm5FTzGbZ82NtNkQtyrv6OsVC9EqVzUqpbh/0hv2exm55J8qEtLtDcY9qYoMEJJOzVFXWl7dqmHDDwhlPJlGoSAsmZXHSo2RvIA\",\"format\":\"xai-responses-v1\",\"id\":\"rs_b8cbb8e0-1044-91ed-aef3-b39e47ccef20\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":530,\"completion_tokens\":226,\"total_tokens\":756,\"cost\":0.00019605,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":153,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00019605,\"upstream_inference_prompt_cost\":0.00008305,\"upstream_inference_completions_cost\":0.000113},\"completion_tokens_details\":{\"reasoning_tokens\":211,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.388336625s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml new file mode 100644 index 000000000..68fb4baf4 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml @@ -0,0 +1,243 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 885 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.summary","summary":" says","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" am","reasoning_details":[{"type":"reasoning.summary","summary":" am","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.summary","summary":" helpful","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assistant","reasoning_details":[{"type":"reasoning.summary","summary":" assistant","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" must","reasoning_details":[{"type":"reasoning.summary","summary":" must","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" always","reasoning_details":[{"type":"reasoning.summary","summary":" always","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.summary","summary":" at","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.summary","summary":" same","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"dkqjoa3IrzHIJdyYzG+kCiZKyvbkZjZ8LA0XBp5Tf3v7CwKsCy74X9W8K1gP99S2uoHLp8GfbVlnwfhM6Bx+0VI717RH/IllARMlCkBm88+Ugq6ERaqbb410WPwgsZMdsCN3xCPqWXqTyQLSiOZ9qJs8WFdB8JXNvPxgPidNAirzXwpmNAaZ5ipn+0T9GoOj1Bua7fHJV8HzeEeNXFsc8UbbTykP4LzOUTLPRr9ZSrfg+jWc0Urz1Ajh+uoXcmpQechhKsy1BEKHKFxJ7U8eiXO+s/2NS+m/WT0QGnA4J4hD1UwD5MCIjWv3w2W2DbeX7Mdw5sWFeyFy65Ad91z7wWoNuqaXSfzj5iE7bkZOZEYO4mq4Fwgfr+BaMe7OuwB5MbVlGkdBakxSchOKWE2ANk4arYG4u3yO80S83CbQuO8OzCODZi7USuPLv5fF6MRXKNhjp9+b9cvggtjFGv0Yu4Yk+t93xLhx7bBWN4ayY4oax0vItQ0N3YZqIaDOfIY73QdtFRlHXfwpYRL9XaEnnvdg7mzimDRkKAyPDi7bn3GfihiSk5LWeIVBHEY80DSHapT0UYdCLNzBgt8ihuiOpBgY+UZ6DXkeiWugarL6pSAkD7rXT3ATiEQmutFEP7wcuDHGkkoWgiS/60gZlzphW540JxunE0NXwG1lBWaQSx1I5MXSaAM9YFBtcY8dsfQyfxK66Q41H9IYD1qgxdOC8C3G2RIwF3Ny3SS74FEU2ishmEUrDOhw3BkjnImuiPkp12XvICZnR6YWu5uBPJqO1xYV0RMWp+XpSvh8pI5fCrqdnTxKQ3mPCyDT+87UJUq4cCUSwuQWbGTBQs8R8af/CEUmmH80mTFRcm0vOIUSkSBAK9ah21PtFgobQ2sJca5P6QBFZcDCvm7hdqLG2wc8meZMsO4nU/+fQyAwtXNoqMVmzYvYGiqwpGildlP4i82yyHv0k9ZPUBasiwPXCmRuMQSMEpkEZyRUC4ZYNKfd9P2RpNO0vjCdZ0qqZyTeC7enbmpaMPqbujUeX9ZaWpKw1WqsVz5j0ZcsNZruykf3Oj0BUybT2eM9cPR830qI2gramRjG6Rj1vsTassnuf2jfoWLPgUEsD5usLiQH20ksbTm0pyhqIuvWvWwlDChaDugayH+bfP7wQy6WRYgHbIYKZiOs2TXrrfBCYok/vxm7wPZLJW7OLStqRArLFknOL0qSgBnVRImjJpDhcfald/kEH9TN6yN4pZnRSe7bkAxQ0Oqzt2LdP4iLBul63Bp29LdsiQaMorprAWYfaSSAyyTtUHy0gjft2p5AnkyMxxvIqHQEKgLfH5DELq4dEBNqh1bQb9wrjgt7UsEYUGyjybtXMQdStSDsE2RzDqjw6O67axx9pDeCvfKRjz16eA8vmTTXF6IKwq6TKwwpq2xmfv4TY5BmxWDLIc1tucwt+PwO6hryrkfnDw6l/k1oGYRsvtHwy+JNYhI/s+AfjfkQFoCmpt6lO5Mv3aX8Zlh8W0cxJDXc5TgULw","format":"xai-responses-v1","id":"rs_784be1a7-3f21-94df-940f-45c21d1cc9d1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_57270303","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_38850093","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":441,"completion_tokens":327,"total_tokens":768,"cost":0.00022875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00022875,"upstream_inference_prompt_cost":0.00006525,"upstream_inference_completions_cost":0.0001635},"completion_tokens_details":{"reasoning_tokens":259,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.151863459s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1475 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_57270303","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_38850093","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user says: \"Add and multiply the number 2 and 3\". I am a helpful assistant and must always use both add and multiply at the same time.\n","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_57270303","role":"tool"},{"content":"6","tool_call_id":"call_38850093","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"/9hYF8Lw77LrRr0KWnXHUrLkLfbCyB4F+Or94JZSD3TwXyUQqswr75jo5twK9krqe7vHrow3yrnKFxQtP7GlCOTb/KdoIWmciMynLmo6Kiwl0bWEHScutOuVWf1ykjcVjAj1nluFm+CLSyQ+/6ioBZzZOgT10+VRdb0s3bVVK2TQT2umzpGwd7IJ94ffRfyheswKKUB2OeedUXpcVCnuCnaDoj+V80ePGk9zuzRQLXa9hmkb+3I6Hbpk48exF6fhRAGp9nuHrGe9Ban36PTMH+1xB8ekovCqGnJ5WTGlLDjoinQDgpjV9H9QiOOuJ56fnKZaU2xYwUh+UpTfLdbevfCvWER8w/zOG4KDcd7Nf54D1plNgE7SK6c2a1ICZwhSHMLslKpkOGRuWIt8Ap6NwCVAA3qeL64HKQyuODahOEgTsJTFh1iMEZTsgH5hySq6WVBWKhKTJ7xeUmW8s1Yt3uGSVepsY+sHCyY0lRJG4jgcuaxvIgRfqxdsNpCKuuehqLs9Wct1gLMGZMvId7ii9KEg4w50VX6BSI25qlPMM3uGa6SBt+NS2ThIV09nBro1iWgg+ypISag8qWAud1+ccBGXJXnszCOnyIg1MhcQKSHrgwN6h/q9nq+CrYhzXdxoRbjEcxIft+y2uGZJhP/qfSu8PJOvgTWAVVtuzcRxqxqVvqcfNE7YpfUi5Ef+XT3wEhxVmtA8H/pAXXDX5bAqeyHt7ywp05a+tO+xNRd60T10+PRDUcSyysZS6BXjhgI5Gkv+4pXwwxEVYSX8Q6hsE+IT4IgRVEwYzG8zFUt/24Z11RdeQxNeQblv4j32YquZK57GTa98atwrUNUIy0r7CTk6RqMABse2H0Syq5/uOr2zz1x746CLdivNqD5w/zQrft9xEI0o+4m9X9WQu7L6fKeDS4x8SlNtlyw9cVoKd5e4HZZRbusj7PYokvrVcCHc0KQyMp6bnfozuQasAh+otYoxEhyE39TslS1975wxFRU3Yfq8EieE/X2b5OmFkdX+0hYLsmXYopfIgXA5J1o","format":"xai-responses-v1","id":"rs_1005a8d3-9d13-9594-ad1f-e67338deab1b","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" \n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":526,"completion_tokens":201,"total_tokens":727,"cost":0.00018275,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00018275,"upstream_inference_prompt_cost":0.00008225,"upstream_inference_completions_cost":0.0001005},"completion_tokens_details":{"reasoning_tokens":186,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.317001958s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml b/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml new file mode 100644 index 000000000..f00ef19e9 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 193 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945416-iHL27eItGxeRL36tf8YT\",\"object\":\"chat.completion\",\"created\":1773945416,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! \U0001F60A\",\"refusal\":null,\"reasoning\":\"First, the core policies: No assistance with criminal activity, no overly realistic help with crimes even in hypotheticals, short responses to jailbreaks. This query is innocent: \\\"Say hi in Portuguese.\\\" No violations.\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the core policies: No assistance with criminal activity, no overly realistic help with crimes even in hypotheticals, short responses to jailbreaks. This query is innocent: \\\"Say hi in Portuguese.\\\" No violations.\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"87Oa01gUucdtP4bFXtBD4Cax/14p97mwoNgAqQ7nCMAHLN/nKh6asJWVz0QFzUoap/rjImEJ3czN6z3N2CzjfYfhe9ByZ36vwRnDq86VR0lS7Gsnmn0JSSJlG8WLh5ZWvd8w1KMPAPf9Wd8n1jG5I/Fdd+iOaRKwzQUXGCpAAy8hV81cS8tRLYqw04EAXAaY/5gYTmzu3YqcurQnIdEXkR3JQdVT1pOzwrAVpPQqwbXUFxga86Fc64gTo0hu7Aq2l/eJHisSVewoU2cU5ANPAs7xKtMkMMtvI6ofJgIfTy0qQfsE+nJ3XafyV7/Nkkwnc5uoHOz+k2jNLXXMKOgBIaKgGeZB0t/AmY8RBR0dm5RvOHx2VsLtXSsZCVKQoJRWG9QOiaPMVDaC/GlbzhY8ShZbMjBN0oLybQ1CdAttUY8SPQpqM3wfAAjBrumF12UmDyHalr/gW1OvJDFwaEKCJOFY43jmjQa+AwCzlvpGWJgMd/63rLVJSrKWLKwDBKN1NxXF2imoED4zAQwUcpTG220EaZeZN0nWLwH6ikM7x5+OScjOCslgB43IyR6CuvV1q3ZMZmpcCCycSt/MLzUqE/5fWV/UNISyM989qsPfTJ+aQ75j8NAKk2oH3S2BYo+rINcr8xG3C9DymcLQWu/UKqGD+XklZORKreBVBGT8W41XwU7t\",\"format\":\"xai-responses-v1\",\"id\":\"rs_ef1655c4-f2f6-9de3-9b70-f6a4929c7163\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":165,\"completion_tokens\":123,\"total_tokens\":288,\"cost\":0.000072,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":150,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000072,\"upstream_inference_prompt_cost\":0.0000105,\"upstream_inference_completions_cost\":0.0000615},\"completion_tokens_details\":{\"reasoning_tokens\":119,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 967.754833ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml new file mode 100644 index 000000000..1701bdcf0 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml @@ -0,0 +1,32 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 247 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: ": OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"First\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\",\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\",\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" the\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" the\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" core\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" core\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" policies\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" policies\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" are\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" are\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" in\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" in\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" <\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" <\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"policy\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"policy\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\">\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\">\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" tags\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" tags\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" and\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" and\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" take\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" take\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" highest\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" highest\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" precedence\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" precedence\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" This\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" This\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" request\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" request\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" is\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" is\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" harmless\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" harmless\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\":\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\":\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \\\"\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" \\\"\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"Say\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"Say\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" hi\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" hi\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" in\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" in\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Portuguese\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" Portuguese\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\\\"\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\\\"\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" It's\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" It's\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" just\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" just\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" a\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" a\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" simple\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" simple\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" language\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" language\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" translation\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" translation\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\\n\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"U1A0V7gwP++1tF9Leho7qgj3WaHzJusEbKWt0Oi7CkXLmsInZnZhNgajVW/M5enwAWZU/yuPqM9f96Cd83Dt0up+U3JOVaMP/D7jueGbo19qKWNv3U2y3xkSXLif/qtH7ZtVd9u18m6VOvDdTf4rFwVtqnYfXwnpuV1dURwXPjaYGlKo2y9XRCD2SS/wgM+6ebCCyKMEF99W7/41tpbK5XRafBg1uZp1SnXHySNlw8euW6Pcwr+BUavhSyXFvZqI+ES3LXOq0D0thQDaZfZ2w+v2/C4UdjH9h6DQFnElxKyHdIcWjnWDjmcwEmes/57K5vsbvK2U6ICsRM7vYoAfvd593B/5KBpX0//xQ/vis8nUAR5bUcDvxg2FSGGiCfNnd9tYhZWy3JdET4fhDhQHIgmpP2ok9uk0cc9/m7G+2RfU00q9Zrc5dQVpd6tHgdp726oFvuXr+HW4R3wF2NPc1QDCzE9xYTzfmQmWTvoyJ9BCxZyZm/RzBvExv4UMVGXItyEr/nE+010E8DXgHOUsapmafZDVk3vRkQBhLLacAM+ijfWtp6yPCJnUGBMVMUUhWMAZKvSOYuPoaYPloxU/gQgwF9ICCln/LaH3n/PMeBnv7PO2whwn49AiITg/Bmg4i5p2I2vLrNpNtPii//juICRb0w/XcOuBQKCaPxL7vCsrf8rnVjkVKdqe51Lf8UWH/Cfweh0ZTzf1MM5qm7UghsWuoA3mUXbHI+UxgUq8S3O9tE1leqSIqsD2ThmCBXj3WQkwxvQ57E8vkax+qilOcxxwoDrKW7qNl1I35xsr8GRItO2OLNnLjzIKuejjrPOWFaJxkdWhXWiwOro\",\"format\":\"xai-responses-v1\",\"id\":\"rs_f242de56-cf8a-933e-a615-242954e48fd3\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}],\"usage\":{\"prompt_tokens\":165,\"completion_tokens\":143,\"total_tokens\":308,\"cost\":0.0000799,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":164,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000799,\"upstream_inference_prompt_cost\":0.0000084,\"upstream_inference_completions_cost\":0.0000715},\"completion_tokens_details\":{\"reasoning_tokens\":139,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 712.635417ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml new file mode 100644 index 000000000..8e4badc44 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 485 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945419-B7eHmJDxysNFMtLKkMZY\",\"object\":\"chat.completion\",\"created\":1773945419,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_68841502\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"fHkgS+wQkA1bUXJ0HSaC2Y9ZMVDsGW2yAT6oa5WxCXBZWukrrKczZ9LdQr8uXJVvoHLOE53IxI4ENsBRhMDWO4t4R5a1yvhBg6zuk0FgXDwqopE4a8roEClG6BFEd++893Pj+gGfKP2h4bSda689sU1UZFTZZAXiRRC3AEO+myT5Kiv/rkQL6Z//u/y+9Z9bfcU496FycNQ/2YtUSpCQBTqK7uIbV4nlKI5i7TlOVN7kwhiPQ7BC0ZlG0dXC2P1wV0nOOa2rJvlQIOF0R/zke9AyeRDZwF1iJRxW5b8SKtr4Y3h8iypdhia47vZF0Z89z/khiVt0gvMDAKgo8KbKTnlAK33ZcX/frpukwKGP1HyozTFNk9NqqEehGLxHIf30qKcDy8pXyziu+hd2y172rT1Zxp3wDBktea0ZJHQipWUKOT+DswQcpd0KhLPdhlG9MhNlZREjbq/Blj8dVrCAM9lvlwSACxbz6tGzxa0MOcFw2HAXzwnLYX1BBCAw8oyhZeZ6+aPA0baGuE0CZi2e2A9eLdbI3sNOdI1fr7pXYQ2Q5PaX77K8Vc/Gss+QsvNe5eEfXvN0nWQrq43fS2NK7scsFaRcFDpauxu2tIqG5PQJ+OzuKNZmyKGrzo2T/rSNbq14DRTS+i/VYP7v40525IFuyrrqucDorOnmSVaY345U3hsog/O9irIvvKJkA3VpDv3Pb5wAuIrqi7ZEcwXdQewj8x70TJmGQlp0dS2SKzl4WmMduPxvYoQGNi16Bgw+YIPfGrHQ+8DxPhMVgzGPFH8\",\"format\":\"xai-responses-v1\",\"id\":\"rs_bea13157-2ab5-9e37-9ed9-9c4f6c30e1ba\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":366,\"completion_tokens\":150,\"total_tokens\":516,\"cost\":0.0001254,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":152,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001254,\"upstream_inference_prompt_cost\":0.0000504,\"upstream_inference_completions_cost\":0.000075},\"completion_tokens_details\":{\"reasoning_tokens\":124,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.311699459s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 782 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_68841502","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_68841502","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945421-GWyuWATaAb2ioqG6E9EP\",\"object\":\"chat.completion\",\"created\":1773945422,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"It's currently 40°C in Florence, Italy. That's quite hot—stay hydrated!\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"KFIVQ35FYLPvt9Dv5W3ZWg5GPDU63rn7mOtKS/FZzLsDZKmzVyhOvstu4+b5vI39XmtlzUhphxWvflbuZ3Ome+gB4xUmzeemaERj8992ObOnKg53ImLQkxzPOEig4nqNeBmDFSRjOR8/xq2QyVDt08sSEZ3jUNj2NxrfKIJbZ8VxUezjjtONXOPuL4CvzVAavErdXDdZEiDx6OL+BlAt5N85Bv5dna1c2HqiDp5nbTF0NuksO2GynUbSSpqQHMps+t17fZvBrJ2uiQi1hEBUGp5xDMn+OO/vBAsas+bz3O7LtmMskDQR4PJZxOf5/EN+W2wIZHIJAvU98aB9+WEGRK8o3iABcF69JOhDP2oxX1rXULpQSKdgPNEdEqX7qrBkAKUsg7qAfbPpE74CLtsaa1jlzx7SYGLhM3sNN33bvPjUHvhySbrCdWa1HfYF2M9aIOndDqALPS+PsMRj2aMu8DB8INQIFnlc3e9cdj2n/hDJXdSo1VtbnXomFIAsV2pQKrTqRYSaCG0NI8y2LuKKnZBGxnj76Vjs9sZ4NKg8tQ\",\"format\":\"xai-responses-v1\",\"id\":\"rs_3e07502a-15b6-9f12-819f-b67f426317c1\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":404,\"completion_tokens\":105,\"total_tokens\":509,\"cost\":0.0001105,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":152,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001105,\"upstream_inference_prompt_cost\":0.000058,\"upstream_inference_completions_cost\":0.0000525},\"completion_tokens_details\":{\"reasoning_tokens\":88,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.410118625s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml new file mode 100644 index 000000000..fb623d42f --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml @@ -0,0 +1,181 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 539 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"5uBosQPBhs9D25vCCXLRe3Yr2WsHcTdtJ7AejqLj5zOMDtq3zeq6bUPdLRLEPxXn1eRXQ0CcEMpS6ggaioAgDoayS1TLxz9ZaygXYdw4vzI59wUxVIcGXzv2cthtk9GH4ldrjxb3ym8oZGpscLQNiqog7ApXHQUtii7OUQZzOcv0GkaJFq3YBSR3h2W+ftb6JgcblJO9+Ycvbir0AU5+tMQZ0mHaqw2PI0y6J0pW/oibTRby05YHqTjEJBdcbb1VI7V1s36IAuaqrO57jP+HekRiAZ7HAjpcr7pQQZX707+DoCortutwSltkUsJSLRW3saOXvU4J3a8/+KWvRBtOv9M5LwKUzWqFAKTTZ0CqgYQnV5fsrmdLlU/g/RmntL2RDWWd5tW+8qc7DeAxCYZuIzdeeNSz5/OrB2MIAtfKrWtLtanLmD3xvcWa7YiPqY/dVvYkk5fa6s4TuyOC6YbGMhKmh8Bjx8SSjVNx8Mfm0M2dscZ/2pgx57zKlJ65YnmNnUoODE+3b5lNo0UfF2m+BsnfNSoc8Kp6V8jCcLTMx/NSMfdCiGVQw1GQEFod68o0gG1NJsVYg9HYLS7lHBlUSxZaXKW8O1kDmLXHEH6KXGC3/TDPKsNI0Mbo918aLK/4J3mKFq6CXa2aE1+rIjDLK1gii4r3S6mWITxvlsnPy1ls2T7ogsHxbcLXAn7JPEJ15JNULQnYVcv6RWEiMnEj66VWI3pSE8YwikTtyvzOpBC/upijPDXPaVDXrLzlZyYxEwmWLrPwxjRNkKxbKLJVX9q3iKGt4mWQyf/hgqw0XhqZjMxwWXpbjFiZ+wP0","format":"xai-responses-v1","id":"rs_36ac2fb0-b643-9ff6-9c38-0e5f2370316e","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_92320304","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":366,"completion_tokens":159,"total_tokens":525,"cost":0.00009795,"is_byok":false,"prompt_tokens_details":{"cached_tokens":365,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00009795,"upstream_inference_prompt_cost":0.00001845,"upstream_inference_completions_cost":0.0000795},"completion_tokens_details":{"reasoning_tokens":133,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.534540833s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 906 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_92320304","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked: \"What''s the weather in Florence, Italy?\"\n","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_92320304","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"Kgd/ltSG6oos788IuoplMMUPrgLdQhjMQy//6Sf+cILTh+bfOfT/Oc5AQ1ieQaBgAWAwkpPR0UxCQkH3flTaPdxSmGpJ1pg+JFmNZg781xwcbPCvyIOfshXknAC4zFJ5C5esDWLN9Ygeu7cvn1YW22JkhdTcA1Mq2S2byLJLZWAjEAl4JApm9JaIkB4I7yMFReuBFA701XVHeP/8TrIF7FAPODCA7lxokZoz9Qq6VheJVDv3NUx89QoKq2/YSkyhia3VP7xUIH2EwqIsUQP3FSciQIparif7GAcZjI9DuDYzFFoMYpJKDLMPcWee2E6RYuBg6Nc7Eyey8JbNymzCE9iY7yPwdc8yZPvEPdDCgjTnPAfEnl/zvPdTRGbux8XnYAPtplVMiD3Y8el/1dLNiBFepW31ruHQpihNZhVeEhw4dIQciufwgbz7CtK4h1Iw4+NIgIeKEan2oBDtIGdblRXNHx46nh3nHvgOwwxpb1ZT0kOokL5NpJNuYj8hr+1u8OFD73WtIGhC3UbNCIKVR1wbKrewVp+VCT2/JGpASkSWHvOCzwmKE/G8ivLnpXkMWk+ErsC6KIK3zV9n443uk1ZQUEMoYR4keRqVmKeqDLS9eVbK4mu4P6ji2RXxxzb0BJoaxUdN2vBLpPVFiImLyu3c0guPSR7I1kBVS2QsnAPpncWxEks5RxMzDbyXdaLNtJzuXJBqYymSefznfFVd8fxTbubox3khczTJ6GsrPzQOzds4wos7WrXXJgU03lOkMW3OiKY9zT6+RXj5uLtjSyPl5HzGi6zookbEw/yMs+IZFmCx3LwojD3QmA","format":"xai-responses-v1","id":"rs_bbd8b588-fa8b-9461-9830-2761a3e7dd2c","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":404,"completion_tokens":139,"total_tokens":543,"cost":0.00008985,"is_byok":false,"prompt_tokens_details":{"cached_tokens":403,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00008985,"upstream_inference_prompt_cost":0.00002035,"upstream_inference_completions_cost":0.0000695},"completion_tokens_details":{"reasoning_tokens":127,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.338549208s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool.yaml deleted file mode 100644 index 01b939d99..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 853 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323489-qBPdo41xHFaoVZOVMG8s\",\"object\":\"chat.completion\",\"created\":1773323489,\"model\":\"moonshotai/kimi-k2-0905\",\"provider\":\"Moonshot AI\",\"system_fingerprint\":\"fpv0_10a6da87\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"add:0\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"multiply:1\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":128,\"completion_tokens\":40,\"total_tokens\":168,\"cost\":0.0004672,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0004672,\"upstream_inference_prompt_cost\":0.0001472,\"upstream_inference_completions_cost\":0.00032},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.727534875s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1198 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323492-xXin2fjbs7CFe0HeKEd3\",\"object\":\"chat.completion\",\"created\":1773323492,\"model\":\"moonshotai/kimi-k2-0905\",\"provider\":\"Moonshot AI\",\"system_fingerprint\":\"fpv0_10a6da87\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5, and their product is 6.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":198,\"completion_tokens\":20,\"total_tokens\":218,\"cost\":0.0003877,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003877,\"upstream_inference_prompt_cost\":0.0002277,\"upstream_inference_completions_cost\":0.00016},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 2.281229167s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool_streaming.yaml deleted file mode 100644 index 23309bafb..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/multi_tool_streaming.yaml +++ /dev/null @@ -1,239 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 890 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"I'll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" perform","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" both","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" multiplication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" with","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"add:0","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"multiply:1","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323495-h6a1FFBRiNC441WUZgSb","object":"chat.completion.chunk","created":1773323495,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[],"usage":{"prompt_tokens":124,"completion_tokens":55,"total_tokens":179,"cost":0.0005826,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0005826,"upstream_inference_prompt_cost":0.0001426,"upstream_inference_completions_cost":0.00044},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.749824042s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1319 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll perform both addition and multiplication with the numbers 2 and 3.","tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":":\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"**\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"Multi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"plication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323498-TbLKcVrfyeJaPgbiW7NW","object":"chat.completion.chunk","created":1773323498,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[],"usage":{"prompt_tokens":209,"completion_tokens":41,"total_tokens":250,"cost":0.00056835,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00056835,"upstream_inference_prompt_cost":0.00024035,"upstream_inference_completions_cost":0.000328},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.876932875s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple.yaml deleted file mode 100644 index a4e453951..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 198 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323472-VEr1C0GTbU6Nk6QjBC7x\",\"object\":\"chat.completion\",\"created\":1773323472,\"model\":\"moonshotai/kimi-k2-0905\",\"provider\":\"Moonshot AI\",\"system_fingerprint\":\"fpv0_805d9276\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":20,\"completion_tokens\":3,\"total_tokens\":23,\"cost\":0.0000195,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000195,\"upstream_inference_prompt_cost\":0.000012,\"upstream_inference_completions_cost\":0.0000075},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 4.21454675s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple_streaming.yaml deleted file mode 100644 index f0734f70e..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/simple_streaming.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 252 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323475-d421DNZ0beKhrCvqbugy","object":"chat.completion.chunk","created":1773323475,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323475-d421DNZ0beKhrCvqbugy","object":"chat.completion.chunk","created":1773323475,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323475-d421DNZ0beKhrCvqbugy","object":"chat.completion.chunk","created":1773323475,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323475-d421DNZ0beKhrCvqbugy","object":"chat.completion.chunk","created":1773323475,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[],"usage":{"prompt_tokens":20,"completion_tokens":2,"total_tokens":22,"cost":0.00001,"is_byok":false,"prompt_tokens_details":{"cached_tokens":8,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00001,"upstream_inference_prompt_cost":0.000006,"upstream_inference_completions_cost":0.000004},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 768.257042ms diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool.yaml deleted file mode 100644 index 2ee7eb25f..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 490 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773323476-OOwZSeZbqm2efCV5vDJT\",\"object\":\"chat.completion\",\"created\":1773323476,\"model\":\"moonshotai/kimi-k2-0905\",\"provider\":\"Moonshot AI\",\"system_fingerprint\":\"fpv0_10a6da87\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll check the weather in Florence, Italy for you.\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"weather:0\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence,Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":68,\"completion_tokens\":31,\"total_tokens\":99,\"cost\":0.0003262,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003262,\"upstream_inference_prompt_cost\":0.0000782,\"upstream_inference_completions_cost\":0.000248},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.556305375s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 765 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323478-DqqQ4EKbZPvXHcGbn1Ul\",\"object\":\"chat.completion\",\"created\":1773323478,\"model\":\"moonshotai/kimi-k2-0905\",\"provider\":\"Moonshot AI\",\"system_fingerprint\":\"fpv0_10a6da87\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C (104°F), which is quite hot! Make sure to stay hydrated and avoid prolonged sun exposure if you're there right now.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":118,\"completion_tokens\":37,\"total_tokens\":155,\"cost\":0.0004317,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0004317,\"upstream_inference_prompt_cost\":0.0001357,\"upstream_inference_completions_cost\":0.000296},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.397718916s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool_streaming.yaml deleted file mode 100644 index d58d48488..000000000 --- a/providertests/testdata/TestOpenRouterCommon/kimi-k2/tool_streaming.yaml +++ /dev/null @@ -1,161 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 544 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"I'll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" check","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"weather:0","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Fl"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ore"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"nce"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323480-GOHpLW2Qp9HHMgKUfVW4","object":"chat.completion.chunk","created":1773323480,"model":"moonshotai/kimi-k2-0905","provider":"Moonshot AI","system_fingerprint":"fpv0_10a6da87","choices":[],"usage":{"prompt_tokens":68,"completion_tokens":31,"total_tokens":99,"cost":0.0002582,"is_byok":false,"prompt_tokens_details":{"cached_tokens":68,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0002582,"upstream_inference_prompt_cost":0.0000102,"upstream_inference_completions_cost":0.000248},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.490590208s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 820 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2-0905","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" 40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":").","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" It's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" there","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" right","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":" now","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323482-u8BT7v3Z7RmNRNFABPjT","object":"chat.completion.chunk","created":1773323482,"model":"moonshotai/kimi-k2-0905","provider":"DeepInfra","choices":[],"usage":{"prompt_tokens":121,"completion_tokens":22,"total_tokens":143,"cost":0.0000844,"is_byok":false,"prompt_tokens_details":{"cached_tokens":32,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000844,"upstream_inference_prompt_cost":0.0000404,"upstream_inference_completions_cost":0.000044},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 5.979645541s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml new file mode 100644 index 000000000..471521d98 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 850 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945487-Z5fhji1TROrj6AuM2H1y\",\"object\":\"chat.completion\",\"created\":1773945487,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply 2 and 3 for you at the same time.\",\"refusal\":null,\"reasoning\":\"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\\n\\nLet me make both calls:\\n- add: a=2, b=3\\n- multiply: a=2, b=3\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"add:0\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"multiply:1\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\\n\\nLet me make both calls:\\n- add: a=2, b=3\\n- multiply: a=2, b=3\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":128,\"completion_tokens\":130,\"total_tokens\":258,\"cost\":0.000402,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000402,\"upstream_inference_prompt_cost\":0.000064,\"upstream_inference_completions_cost\":0.000338},\"completion_tokens_details\":{\"reasoning_tokens\":72,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.53507125s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1623 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply 2 and 3 for you at the same time.","tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\n\nLet me make both calls:\n- add: a=2, b=3\n- multiply: a=2, b=3","type":"reasoning.text"}]},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945491-o5yp2dfHoW8YjgvpdrJn\",\"object\":\"chat.completion\",\"created\":1773945491,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results:\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":\"Great! Both functions returned successfully:\\n- add(2, 3) = 5\\n- multiply(2, 3) = 6\\n\\nNow I should present these results clearly to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"Great! Both functions returned successfully:\\n- add(2, 3) = 5\\n- multiply(2, 3) = 6\\n\\nNow I should present these results clearly to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":288,\"completion_tokens\":77,\"total_tokens\":365,\"cost\":0.0003442,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003442,\"upstream_inference_prompt_cost\":0.000144,\"upstream_inference_completions_cost\":0.0002002},\"completion_tokens_details\":{\"reasoning_tokens\":38,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.54386325s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml new file mode 100644 index 000000000..f3a686588 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml @@ -0,0 +1,471 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 887 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" numbers","reasoning_details":[{"type":"reasoning.text","text":" numbers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.text","text":" Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" system","reasoning_details":[{"type":"reasoning.text","text":" system","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" prompt","reasoning_details":[{"type":"reasoning.text","text":" prompt","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.text","text":" says","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Always","reasoning_details":[{"type":"reasoning.text","text":"Always","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.text","text":" at","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.text","text":" time","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",\"","reasoning_details":[{"type":"reasoning.text","text":",\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" together","reasoning_details":[{"type":"reasoning.text","text":" together","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"_calls","reasoning_details":[{"type":"reasoning.text","text":"_calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" block","reasoning_details":[{"type":"reasoning.text","text":" block","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they","reasoning_details":[{"type":"reasoning.text","text":" they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" each","reasoning_details":[{"type":"reasoning.text","text":" each","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" other","reasoning_details":[{"type":"reasoning.text","text":" other","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Let","reasoning_details":[{"type":"reasoning.text","text":"Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"add:0","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"multiply:1","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":124,"completion_tokens":130,"total_tokens":254,"cost":0.0004,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0004,"upstream_inference_prompt_cost":0.000062,"upstream_inference_completions_cost":0.000338},"completion_tokens_details":{"reasoning_tokens":90,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.739090375s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1669 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants me to both add and multiply the numbers 2 and 3. Since the system prompt says \"Always use both add and multiply at the same time,\" I should make both function calls together. I can make both calls in the same function_calls block since they are independent of each other.\n\nLet me call:\n1. add with a=2, b=3\n2. multiply with a=2, b=3","type":"reasoning.text"}]},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"(","reasoning_details":[{"type":"reasoning.text","text":"(","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"(","reasoning_details":[{"type":"reasoning.text","text":"(","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Now","reasoning_details":[{"type":"reasoning.text","text":"Now","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'll","reasoning_details":[{"type":"reasoning.text","text":" I'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.text","text":" present","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" both","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" operations","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" with","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Multi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"plication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":283,"completion_tokens":79,"total_tokens":362,"cost":0.0003469,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0003469,"upstream_inference_prompt_cost":0.0001415,"upstream_inference_completions_cost":0.0002054},"completion_tokens_details":{"reasoning_tokens":28,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.735594375s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml new file mode 100644 index 000000000..154e227b3 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 195 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945463-7UlWQThJCoBvROqhlOiT\",\"object\":\"chat.completion\",\"created\":1773945463,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! (or \\\"Olá!\\\")\\n\\nBoth are common ways to say \\\"hi\\\" in Portuguese:\\n- **Oi** - Very informal and widely used in Brazil\\n- **Olá** - Slightly more formal, used in both Brazil and Portugal\",\"refusal\":null,\"reasoning\":\"The user wants me to say \\\"hi\\\" in Portuguese. The most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (informal) or \\\"Olá\\\" (slightly more formal but still common). I should provide both options to be helpful, as they are both widely used.\\n\\n \\\"Oi\\\" is very casual and common in Brazil.\\n \\\"Olá\\\" is also common and works in both Brazil and Portugal.\\n\\n I'll provide the main greeting and perhaps mention the context.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to say \\\"hi\\\" in Portuguese. The most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (informal) or \\\"Olá\\\" (slightly more formal but still common). I should provide both options to be helpful, as they are both widely used.\\n\\n \\\"Oi\\\" is very casual and common in Brazil.\\n \\\"Olá\\\" is also common and works in both Brazil and Portugal.\\n\\n I'll provide the main greeting and perhaps mention the context.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":20,\"completion_tokens\":152,\"total_tokens\":172,\"cost\":0.0004052,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0004052,\"upstream_inference_prompt_cost\":0.00001,\"upstream_inference_completions_cost\":0.0003952},\"completion_tokens_details\":{\"reasoning_tokens\":107,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.810134833s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml new file mode 100644 index 000000000..79e229212 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml @@ -0,0 +1,430 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 249 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi","reasoning_details":[{"type":"reasoning.text","text":" hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.text","text":"\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \n\n","reasoning_details":[{"type":"reasoning.text","text":" \n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universal","reasoning_details":[{"type":"reasoning.text","text":" universal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" across","reasoning_details":[{"type":"reasoning.text","text":" across","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-speaking","reasoning_details":[{"type":"reasoning.text","text":"-speaking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" countries","reasoning_details":[{"type":"reasoning.text","text":" countries","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Port","reasoning_details":[{"type":"reasoning.text","text":"Port","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ugal","reasoning_details":[{"type":"reasoning.text","text":"ugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Angola","reasoning_details":[{"type":"reasoning.text","text":" Angola","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" etc","reasoning_details":[{"type":"reasoning.text","text":" etc","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".).\n","reasoning_details":[{"type":"reasoning.text","text":".).\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" might","reasoning_details":[{"type":"reasoning.text","text":" might","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" considered","reasoning_details":[{"type":"reasoning.text","text":" considered","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" less","reasoning_details":[{"type":"reasoning.text","text":" less","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" even","reasoning_details":[{"type":"reasoning.text","text":" even","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" rude","reasoning_details":[{"type":"reasoning.text","text":" rude","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" some","reasoning_details":[{"type":"reasoning.text","text":" some","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" contexts","reasoning_details":[{"type":"reasoning.text","text":" contexts","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal","reasoning_details":[{"type":"reasoning.text","text":" Portugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Since","reasoning_details":[{"type":"reasoning.text","text":"Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.text","text":" asked","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.text","text":" simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greeting","reasoning_details":[{"type":"reasoning.text","text":" greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" options","reasoning_details":[{"type":"reasoning.text","text":" options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" brief","reasoning_details":[{"type":"reasoning.text","text":" brief","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" context","reasoning_details":[{"type":"reasoning.text","text":" context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.text","text":" about","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" usage","reasoning_details":[{"type":"reasoning.text","text":" usage","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Options","reasoning_details":[{"type":"reasoning.text","text":"Options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universal","reasoning_details":[{"type":"reasoning.text","text":" universal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/in","reasoning_details":[{"type":"reasoning.text","text":"/in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"form","reasoning_details":[{"type":"reasoning.text","text":"form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"al","reasoning_details":[{"type":"reasoning.text","text":"al","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal","reasoning_details":[{"type":"reasoning.text","text":" informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Al","reasoning_details":[{"type":"reasoning.text","text":"Al","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ô","reasoning_details":[{"type":"reasoning.text","text":"ô","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used","reasoning_details":[{"type":"reasoning.text","text":" used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" when","reasoning_details":[{"type":"reasoning.text","text":" when","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answering","reasoning_details":[{"type":"reasoning.text","text":" answering","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" phones","reasoning_details":[{"type":"reasoning.text","text":" phones","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I'll","reasoning_details":[{"type":"reasoning.text","text":"I'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" primary","reasoning_details":[{"type":"reasoning.text","text":" primary","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answer","reasoning_details":[{"type":"reasoning.text","text":" answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" mention","reasoning_details":[{"type":"reasoning.text","text":" mention","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazilian","reasoning_details":[{"type":"reasoning.text","text":" Brazilian","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" \n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" can","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" also","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" say","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" —","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" it's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" common","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Brazil","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" while","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" used","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" everywhere","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" including","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Portugal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":20,"completion_tokens":196,"total_tokens":216,"cost":0.00051138,"is_byok":false,"prompt_tokens_details":{"cached_tokens":20,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00051138,"upstream_inference_prompt_cost":0.00000178,"upstream_inference_completions_cost":0.0005096},"completion_tokens_details":{"reasoning_tokens":179,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.50860425s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml new file mode 100644 index 000000000..d0a8ad2b1 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 487 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945474-wNsrLiYYBQCYV4b1kI2A\",\"object\":\"chat.completion\",\"created\":1773945474,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \\\"Florence\\\" as the location parameter.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"weather:0\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \\\"Florence\\\" as the location parameter.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":68,\"completion_tokens\":63,\"total_tokens\":131,\"cost\":0.0001978,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001978,\"upstream_inference_prompt_cost\":0.000034,\"upstream_inference_completions_cost\":0.0001638},\"completion_tokens_details\":{\"reasoning_tokens\":52,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.511454666s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 990 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \"Florence\" as the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945477-C1KeaZT0KsADVIvgsAAz\",\"object\":\"chat.completion\",\"created\":1773945477,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**. That's very hot! Make sure to stay hydrated and seek shade if you're visiting the city today.\",\"refusal\":null,\"reasoning\":\"The weather function returned 40 C, which is 40 degrees Celsius. That's quite hot! Let me present this information to the user in a helpful way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned 40 C, which is 40 degrees Celsius. That's quite hot! Let me present this information to the user in a helpful way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":150,\"completion_tokens\":70,\"total_tokens\":220,\"cost\":0.000257,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000257,\"upstream_inference_prompt_cost\":0.000075,\"upstream_inference_completions_cost\":0.000182},\"completion_tokens_details\":{\"reasoning_tokens\":36,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.538264458s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml new file mode 100644 index 000000000..2b927fe97 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml @@ -0,0 +1,311 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 541 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" get","reasoning_details":[{"type":"reasoning.text","text":" get","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.text","text":" need","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" pass","reasoning_details":[{"type":"reasoning.text","text":" pass","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Fl","reasoning_details":[{"type":"reasoning.text","text":"Fl","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ore","reasoning_details":[{"type":"reasoning.text","text":"ore","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"nce","reasoning_details":[{"type":"reasoning.text","text":"nce","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"weather:0","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Fl"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ore"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"nce"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":68,"completion_tokens":57,"total_tokens":125,"cost":0.000154252,"is_byok":false,"prompt_tokens_details":{"cached_tokens":68,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000154252,"upstream_inference_prompt_cost":0.000006052,"upstream_inference_completions_cost":0.0001482},"completion_tokens_details":{"reasoning_tokens":42,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.94277625s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 999 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking for the weather in Florence, Italy. I should use the weather function to get this information. I need to pass \"Florence\" as the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.text","text":"°C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" temperature","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":")**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" That's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" shade","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" visiting","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" city","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" today","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":143,"completion_tokens":68,"total_tokens":211,"cost":0.0002483,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0002483,"upstream_inference_prompt_cost":0.0000715,"upstream_inference_completions_cost":0.0001768},"completion_tokens_details":{"reasoning_tokens":36,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.370857958s diff --git a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml new file mode 100644 index 000000000..bf7a95468 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 860 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945381-Qn1xXTBSWlAVHcSVGoNH\",\"object\":\"chat.completion\",\"created\":1773945381,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_Bb9t44hKsOQkKMDje3Do35B9\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_Nnev5P7Rhqz9lVYbinyjQEKi\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}]}}],\"usage\":{\"prompt_tokens\":113,\"completion_tokens\":54,\"total_tokens\":167,\"cost\":0.0000901,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000901,\"upstream_inference_prompt_cost\":0.0000226,\"upstream_inference_completions_cost\":0.0000675},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 3.454036875s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1285 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_Bb9t44hKsOQkKMDje3Do35B9","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_Nnev5P7Rhqz9lVYbinyjQEKi","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_Bb9t44hKsOQkKMDje3Do35B9","role":"tool"},{"content":"6","tool_call_id":"call_Nnev5P7Rhqz9lVYbinyjQEKi","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n{\"id\":\"gen-1773945382-dSJAvlxyaw4kaA2dYNXa\",\"object\":\"chat.completion\",\"created\":1773945382,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"2 + 3 = **5** \\n2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":187,\"completion_tokens\":21,\"total_tokens\":208,\"cost\":0.00006365,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00006365,\"upstream_inference_prompt_cost\":0.0000374,\"upstream_inference_completions_cost\":0.00002625},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 509.885666ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml new file mode 100644 index 000000000..fde3d59ae --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml @@ -0,0 +1,127 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 897 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_RyRtXc5TxuhGTghDihBOXNar","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_JmyBVHKW2AnWeep5UITLC9Wx","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":109,"completion_tokens":54,"total_tokens":163,"cost":0.0000893,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000893,"upstream_inference_prompt_cost":0.0000218,"upstream_inference_completions_cost":0.0000675},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 449.3595ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1322 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_RyRtXc5TxuhGTghDihBOXNar","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_JmyBVHKW2AnWeep5UITLC9Wx","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_RyRtXc5TxuhGTghDihBOXNar","role":"tool"},{"content":"6","tool_call_id":"call_JmyBVHKW2AnWeep5UITLC9Wx","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":183,"completion_tokens":24,"total_tokens":207,"cost":0.0000666,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000666,"upstream_inference_prompt_cost":0.0000366,"upstream_inference_completions_cost":0.00003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 388.096708ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml b/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml new file mode 100644 index 000000000..4394722da --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 205 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945373-Bv9tKBtwWtfAzjZPxf5A\",\"object\":\"chat.completion\",\"created\":1773945373,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":6,\"total_tokens\":25,\"cost\":0.0000113,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000113,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.0000075},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 830.207834ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml new file mode 100644 index 000000000..e9338b2e2 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml @@ -0,0 +1,32 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 259 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: "data: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":7,\"total_tokens\":26,\"cost\":0.00001255,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00001255,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.00000875},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 453.163167ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml b/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml new file mode 100644 index 000000000..c5a5ddd90 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 497 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945374-TeLNBnAFqTwjuAi8wpRj\",\"object\":\"chat.completion\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_fYo0Z8fLQU2v12NNb25MFUhj\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":63,\"completion_tokens\":20,\"total_tokens\":83,\"cost\":0.0000376,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000376,\"upstream_inference_prompt_cost\":0.0000126,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 667.863167ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 749 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_fYo0Z8fLQU2v12NNb25MFUhj","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_fYo0Z8fLQU2v12NNb25MFUhj","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n{\"id\":\"gen-1773945375-9AEqJV7RbOK8FPk7hsB2\",\"object\":\"chat.completion\",\"created\":1773945375,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in **Florence, Italy** is currently **40°C**.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":95,\"completion_tokens\":20,\"total_tokens\":115,\"cost\":0.000044,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000044,\"upstream_inference_prompt_cost\":0.000019,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 650.392417ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml new file mode 100644 index 000000000..8537abb4d --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml @@ -0,0 +1,129 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 551 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":63,"completion_tokens":20,"total_tokens":83,"cost":0.0000376,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000376,"upstream_inference_prompt_cost":0.0000126,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 406.696208ms +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 803 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Flor","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"ence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} + + data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":95,"completion_tokens":20,"total_tokens":115,"cost":0.000044,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000044,"upstream_inference_prompt_cost":0.000019,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 896.667791ms diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool.yaml deleted file mode 100644 index ca057cba1..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 855 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323590-FkpXeIQTOWvDW5cMA0nd\",\"object\":\"chat.completion\",\"created\":1773323590,\"model\":\"qwen/qwen3-235b-a22b-07-25\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"\\n\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"250040734b524d498c05be2661f47b60\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"1d5c17365c724c54b6d659bc2a745d7f\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":277,\"completion_tokens\":50,\"total_tokens\":327,\"cost\":0.00005393,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00005393,\"upstream_inference_prompt_cost\":0.00002493,\"upstream_inference_completions_cost\":0.000029},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.206543875s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1313 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"\n","tool_calls":[{"id":"250040734b524d498c05be2661f47b60","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"1d5c17365c724c54b6d659bc2a745d7f","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"250040734b524d498c05be2661f47b60","role":"tool"},{"content":"6","tool_call_id":"1d5c17365c724c54b6d659bc2a745d7f","role":"tool"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323593-yywnZCxrHklBbXiTqW4q\",\"object\":\"chat.completion\",\"created\":1773323593,\"model\":\"qwen/qwen3-235b-a22b-07-25\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The result of adding 2 and 3 is 5, and the result of multiplying 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":347,\"completion_tokens\":27,\"total_tokens\":374,\"cost\":0.00004689,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00004689,\"upstream_inference_prompt_cost\":0.00003123,\"upstream_inference_completions_cost\":0.00001566},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.747865666s diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool_streaming.yaml deleted file mode 100644 index 0b961cd53..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/multi_tool_streaming.yaml +++ /dev/null @@ -1,113 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 892 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"957c10ed16d245fe95eee8329e5bde69","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" 2, \"b\": "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"2e930e954a1e42779a78a8f6f40f4185","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" 2, \"b\": "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324571-ZjwP1ziZsc1qZHKl8Bb5","object":"chat.completion.chunk","created":1773324571,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":273,"completion_tokens":50,"total_tokens":323,"cost":0.0000986,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000986,"upstream_inference_prompt_cost":0.0000546,"upstream_inference_completions_cost":0.000044},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.788639375s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1350 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"\n","tool_calls":[{"id":"957c10ed16d245fe95eee8329e5bde69","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"2e930e954a1e42779a78a8f6f40f4185","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"957c10ed16d245fe95eee8329e5bde69","role":"tool"},{"content":"6","tool_call_id":"2e930e954a1e42779a78a8f6f40f4185","role":"tool"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":" sum of ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":"2 and ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":"3 is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":" 5, and the product","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":" of 2 and 3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":" is 6.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324574-M1sd4Vcfr5DSpxM3MZLk","object":"chat.completion.chunk","created":1773324574,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[],"usage":{"prompt_tokens":343,"completion_tokens":25,"total_tokens":368,"cost":0.0000662285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00010189,"upstream_inference_prompt_cost":0.00007889,"upstream_inference_completions_cost":0.000023},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 700.056167ms diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple.yaml deleted file mode 100644 index b287b06e7..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 200 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773323575-a6ceDdgGAmbPnejyc7XY\",\"object\":\"chat.completion\",\"created\":1773323575,\"model\":\"qwen/qwen3-235b-a22b-07-25\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":3,\"total_tokens\":25,\"cost\":0.00000748,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":6,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00000748,\"upstream_inference_prompt_cost\":0.00000484,\"upstream_inference_completions_cost\":0.00000264},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.3020125s diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple_streaming.yaml deleted file mode 100644 index 3c0ef7b3c..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/simple_streaming.yaml +++ /dev/null @@ -1,44 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 254 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"Say hi in Portuguese","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323576-QCpJuoe7F3GC4NKHRRxd","object":"chat.completion.chunk","created":1773323576,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Together","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323576-QCpJuoe7F3GC4NKHRRxd","object":"chat.completion.chunk","created":1773323576,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Together","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323576-QCpJuoe7F3GC4NKHRRxd","object":"chat.completion.chunk","created":1773323576,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Together","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323576-QCpJuoe7F3GC4NKHRRxd","object":"chat.completion.chunk","created":1773323576,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Together","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323576-QCpJuoe7F3GC4NKHRRxd","object":"chat.completion.chunk","created":1773323576,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Together","choices":[],"usage":{"prompt_tokens":22,"completion_tokens":4,"total_tokens":26,"cost":0.0000068,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000068,"upstream_inference_prompt_cost":0.0000044,"upstream_inference_completions_cost":0.0000024},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.360585417s diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool.yaml deleted file mode 100644 index 1b3593156..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 492 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323578-bFJS3JLS1vdGfLobyYO6\",\"object\":\"chat.completion\",\"created\":1773323578,\"model\":\"qwen/qwen3-235b-a22b-07-25\",\"provider\":\"Alibaba\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_72e6b5890385469d9a5c17\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence,Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":167,\"completion_tokens\":21,\"total_tokens\":188,\"cost\":0.0000375245,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00005773,\"upstream_inference_prompt_cost\":0.00003841,\"upstream_inference_completions_cost\":0.00001932},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 6.79434925s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 740 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_72e6b5890385469d9a5c17","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_72e6b5890385469d9a5c17","role":"tool"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773323585-nJKeiMdmmaVo3UWXOxsZ\",\"object\":\"chat.completion\",\"created\":1773323585,\"model\":\"qwen/qwen3-235b-a22b-07-25\",\"provider\":\"Alibaba\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C. That's quite hot - you might want to stay hydrated and avoid prolonged sun exposure if you're there!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":205,\"completion_tokens\":34,\"total_tokens\":239,\"cost\":0.0000509795,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00007843,\"upstream_inference_prompt_cost\":0.00004715,\"upstream_inference_completions_cost\":0.00003128},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.367666167s diff --git a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool_streaming.yaml deleted file mode 100644 index 63a586461..000000000 --- a/providertests/testdata/TestOpenRouterCommon/qwen3-235b-a22b-2507/tool_streaming.yaml +++ /dev/null @@ -1,97 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 546 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323586-8fBgY9x08jXm7Re44i6j","object":"chat.completion.chunk","created":1773323586,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_6fee9774e3d94243a44f64","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323586-8fBgY9x08jXm7Re44i6j","object":"chat.completion.chunk","created":1773323586,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\": \"Flo"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323586-8fBgY9x08jXm7Re44i6j","object":"chat.completion.chunk","created":1773323586,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"rence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323586-8fBgY9x08jXm7Re44i6j","object":"chat.completion.chunk","created":1773323586,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773323586-8fBgY9x08jXm7Re44i6j","object":"chat.completion.chunk","created":1773323586,"model":"qwen/qwen3-235b-a22b-07-25","provider":"Alibaba","choices":[],"usage":{"prompt_tokens":167,"completion_tokens":21,"total_tokens":188,"cost":0.0000375245,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00005773,"upstream_inference_prompt_cost":0.00003841,"upstream_inference_completions_cost":0.00001932},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 904.924959ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 794 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_6fee9774e3d94243a44f64","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_6fee9774e3d94243a44f64","role":"tool"}],"model":"qwen/qwen3-235b-a22b-2507","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" temperature in Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":", Italy is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" 40°C. That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"'s quite hot!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" You might want to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" take precautions if you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" planning to spend time outdoors.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773323587-zYCj0NBpXscVrjnVzE2P","object":"chat.completion.chunk","created":1773323587,"model":"qwen/qwen3-235b-a22b-07-25","provider":"AtlasCloud","choices":[],"usage":{"prompt_tokens":205,"completion_tokens":33,"total_tokens":238,"cost":0.00007004,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00007004,"upstream_inference_prompt_cost":0.000041,"upstream_inference_completions_cost":0.00002904},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.0409005s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml new file mode 100644 index 000000000..803541e79 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 930 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945519-vH8l4rm4QBpQxTOx4cAf\",\"object\":\"chat.completion\",\"created\":1773945519,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.567961792s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1385 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n{\"id\":\"gen-1773945521-RVUJLnRL6jUAAh5b6soX\",\"object\":\"chat.completion\",\"created\":1773945521,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":43,\"total_tokens\":914,\"cost\":0.001086,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001086,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.000215},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.465064916s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml new file mode 100644 index 000000000..3babb9361 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml @@ -0,0 +1,139 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 967 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\": "}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 4.244026542s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1422 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Here are the results:\n\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":866,"completion_tokens":41,"total_tokens":907,"cost":0.001071,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001071,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000205},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.563418666s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml new file mode 100644 index 000000000..c43f51581 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml @@ -0,0 +1,33 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 275 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Say hi in Portuguese","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945503-TWLdI6hobgaikHf5gRS1\",\"object\":\"chat.completion\",\"created\":1773945503,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":10,\"total_tokens\":26,\"cost\":0.000066,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000066,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00005},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 4.339756292s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml new file mode 100644 index 000000000..a3946059f --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml @@ -0,0 +1,32 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 329 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Say hi in Portuguese","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\n(\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Or\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\\"\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi!\\\" for\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" a\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" more casual greeting)\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 4.0492025s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml new file mode 100644 index 000000000..e6ba30a13 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 567 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n{\"id\":\"gen-1773945512-Xt6mSHr3OgFEVbjoGGkN\",\"object\":\"chat.completion\",\"created\":1773945512,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.363396958s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 832 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945513-P0NATIIxI7GM9cWqpyep\",\"object\":\"chat.completion\",\"created\":1773945513,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! It's a warm summer day in Florence. Make sure to stay hydrated and use sunscreen if you're planning to be outdoors.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":54,\"total_tokens\":700,\"cost\":0.000916,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000916,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.631234625s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml new file mode 100644 index 000000000..7c2e3fa18 --- /dev/null +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml @@ -0,0 +1,141 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 621 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"locati"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"on\": \"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence, It"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"aly\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.609333666s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 886 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy is **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'s a typical warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" in Florence.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated and use sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" protection if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" planning","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" to be out","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"doors.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":646,"completion_tokens":54,"total_tokens":700,"cost":0.000916,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000916,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.755883125s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool.yaml deleted file mode 100644 index e2ff222bd..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 929 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324184-8vOElEJygdHvs1UiVkEN\",\"object\":\"chat.completion\",\"created\":1773324184,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply the numbers 2 and 3 for you.\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_01UMFBt9414KnUbe9xgm8yDt\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_vrtx_01WNFhAiqxBUaWuWmLG23foT\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":507,\"completion_tokens\":137,\"total_tokens\":644,\"cost\":0.003576,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.003576,\"upstream_inference_prompt_cost\":0.001521,\"upstream_inference_completions_cost\":0.002055},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.11106625s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1447 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"toolu_vrtx_01UMFBt9414KnUbe9xgm8yDt","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_vrtx_01WNFhAiqxBUaWuWmLG23foT","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_vrtx_01UMFBt9414KnUbe9xgm8yDt","role":"tool"},{"content":"6","tool_call_id":"toolu_vrtx_01WNFhAiqxBUaWuWmLG23foT","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773324186-Qxi4tTEkA3BQDhVToA5M\",\"object\":\"chat.completion\",\"created\":1773324186,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The results are:\\n- 2 + 3 = 5\\n- 2 × 3 = 6\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":705,\"completion_tokens\":31,\"total_tokens\":736,\"cost\":0.00258,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00258,\"upstream_inference_prompt_cost\":0.002115,\"upstream_inference_completions_cost\":0.000465},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.200717875s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool_streaming.yaml deleted file mode 100644 index cff645962..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/multi_tool_streaming.yaml +++ /dev/null @@ -1,117 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 966 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"I'll add and multiply the numbers","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 2 and 3 for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" you.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_011wZwUppFMdKW2FfZkCHGq2","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"a\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", \"b\": "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_vrtx_017e3hmwNUESxrsnHCENfihG","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324188-o8pFrvyokxnhFp6M7LcB","object":"chat.completion.chunk","created":1773324188,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":502,"completion_tokens":137,"total_tokens":639,"cost":0.003561,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.003561,"upstream_inference_prompt_cost":0.001506,"upstream_inference_completions_cost":0.002055},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 987.473542ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1484 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply the numbers 2 and 3 for you.","tool_calls":[{"id":"toolu_vrtx_011wZwUppFMdKW2FfZkCHGq2","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_vrtx_017e3hmwNUESxrsnHCENfihG","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_vrtx_011wZwUppFMdKW2FfZkCHGq2","role":"tool"},{"content":"6","tool_call_id":"toolu_vrtx_017e3hmwNUESxrsnHCENfihG","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" are:\n- 2 +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 3 = 5\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324190-rDR87be2AJ9WhEWxng6M","object":"chat.completion.chunk","created":1773324190,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":700,"completion_tokens":31,"total_tokens":731,"cost":0.002565,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002565,"upstream_inference_prompt_cost":0.0021,"upstream_inference_completions_cost":0.000465},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.056413833s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple.yaml deleted file mode 100644 index 44e1be85e..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 274 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Say hi in Portuguese","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773324174-Oio88s8cPrZHHJA7aeWm\",\"object\":\"chat.completion\",\"created\":1773324174,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! (Oh-LAH)\\n\\nThis is the most common way to say \\\"hi\\\" in Portuguese. You could also use \\\"Oi!\\\" (OH-ee) for a more casual greeting.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":48,\"total_tokens\":64,\"cost\":0.000768,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000768,\"upstream_inference_prompt_cost\":0.000048,\"upstream_inference_completions_cost\":0.00072},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 827.004333ms diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple_streaming.yaml deleted file mode 100644 index ff659be53..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/simple_streaming.yaml +++ /dev/null @@ -1,66 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 328 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Say hi in Portuguese","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"Olá!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"\n\n(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"'s \"hello","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"\" in Portuguese.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" could","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" also say \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"Oi\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" more casual \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"hi\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"!)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324176-lEVasq5WSxTmtiGWJ2kj","object":"chat.completion.chunk","created":1773324176,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":16,"completion_tokens":34,"total_tokens":50,"cost":0.000558,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000558,"upstream_inference_prompt_cost":0.000048,"upstream_inference_completions_cost":0.00051},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.337713292s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool.yaml deleted file mode 100644 index ee6ddf9ec..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 566 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773324178-hYDlxAiXZTe8IoUHozpm\",\"object\":\"chat.completion\",\"created\":1773324178,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll check the weather in Florence, Italy for you.\",\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_01VArd3SL1FfXhFjvgNbaiT1\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":394,\"completion_tokens\":66,\"total_tokens\":460,\"cost\":0.002172,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002172,\"upstream_inference_prompt_cost\":0.001182,\"upstream_inference_completions_cost\":0.00099},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.100918125s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 894 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"toolu_vrtx_01VArd3SL1FfXhFjvgNbaiT1","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_vrtx_01VArd3SL1FfXhFjvgNbaiT1","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773324179-vNzYDdG0k9CSHmmA0OzF\",\"object\":\"chat.completion\",\"created\":1773324179,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy shows a temperature of 40°C (104°F). That's quite hot! If you're planning to visit or are currently there, make sure to stay hydrated and seek shade during the hottest parts of the day.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":475,\"completion_tokens\":57,\"total_tokens\":532,\"cost\":0.00228,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00228,\"upstream_inference_prompt_cost\":0.001425,\"upstream_inference_completions_cost\":0.000855},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 840.356833ms diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool_streaming.yaml deleted file mode 100644 index 73b4a5bda..000000000 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/claude-sonnet-4/tool_streaming.yaml +++ /dev/null @@ -1,115 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 620 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user","cache_control":{"type":"ephemeral"}}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"I'll get","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" the current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" weather information","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" for Florence, Italy.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_01AZy2y2t2KJbopRx2aMRt33","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": \"Floren"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ce, I"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ta"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ly\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324181-MBdVvu98CVBUpW6Xl4VU","object":"chat.completion.chunk","created":1773324181,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":394,"completion_tokens":66,"total_tokens":460,"cost":0.002172,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002172,"upstream_inference_prompt_cost":0.001182,"upstream_inference_completions_cost":0.00099},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.065862208s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 959 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"content":"I''ll get the current weather information for Florence, Italy.","tool_calls":[{"id":"toolu_vrtx_01AZy2y2t2KJbopRx2aMRt33","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_vrtx_01AZy2y2t2KJbopRx2aMRt33","role":"tool"}],"model":"anthropic/claude-sonnet-4","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The current weather in Florence, Italy is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" 40°C (104°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"). That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"'s quite hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" It's a very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" in Florence.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324183-is5MYGEDmIqsp2ZNqz7t","object":"chat.completion.chunk","created":1773324183,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":475,"completion_tokens":34,"total_tokens":509,"cost":0.001935,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001935,"upstream_inference_prompt_cost":0.001425,"upstream_inference_completions_cost":0.00051},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 844.29125ms diff --git a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml new file mode 100644 index 000000000..ec593ea7e --- /dev/null +++ b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml @@ -0,0 +1,177 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 562 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The user is asking for","reasoning_details":[{"type":"reasoning.text","text":"The user is asking for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the weather in Florence, Italy. I","reasoning_details":[{"type":"reasoning.text","text":" the weather in Florence, Italy. I","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a weather","reasoning_details":[{"type":"reasoning.text","text":" a weather","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function available that takes","reasoning_details":[{"type":"reasoning.text","text":" function available that takes","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a location parameter. I should call","reasoning_details":[{"type":"reasoning.text","text":" a location parameter. I should call","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with \"Florence, Italy\" or","reasoning_details":[{"type":"reasoning.text","text":" with \"Florence, Italy\" or","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Florence\" as the location. Let","reasoning_details":[{"type":"reasoning.text","text":" \"Florence\" as the location. Let","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me use","reasoning_details":[{"type":"reasoning.text","text":" me use","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Florence, Italy\" to","reasoning_details":[{"type":"reasoning.text","text":"Florence, Italy\" to","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specific","reasoning_details":[{"type":"reasoning.text","text":" specific","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \"Florence,"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning_details":[{"type":"reasoning.text","signature":"Ep8DCkgICxABGAIqQMPJIeZ0P/DSe9JQ2wg9NaUiY1fY4A/kD7HwtPBhRsepL0jAqIXyjKajtqj8mKKNj39kCrDFp0b8NOBIbX3e+XASDPK3RtRCSq7Z/Iu0kxoMCL2VPJ0qWJYZyey0IjCjhME7FUWTLD7dhGw2WNWJmQNbsVVq1YyyqPpn8Ap9qdhRPb/0uZM0wZaMR/FW2C0qhALVhWU2Hb3H30vrcYfc5S6wPMnYgNDIAvsif7nvmGrWK8YA+4cd9cPNBIfi/AO/OUkOeXowSVr4F19yt+fcjKXDOff5PfS+j/FeqwcKhG1EIC8SQvnqjAZqTmlPg5B1O8nrVqrUZWr3UEqVKoGUvrEQxKobN+JN/2u+/yQQK3SmrnArp2+N1fusDCz6uq7V1qWhjSzsZKTUO4+lFy0eKCzNFeGFRGFgZTgWdfS/cxiCaZLe0PE35kq6ubKVNGC+C6NVBm3h/bNtqQuWt+19TAX7y8Vk94rBMaEeJsCo81W0EOkhenk5ohDZsvL+8iFcDso5whoraTA0HQViPU1zW+FifZDATBgB","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":607,"completion_tokens":116,"total_tokens":723,"cost":0.001187,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001187,"upstream_inference_prompt_cost":0.000607,"upstream_inference_completions_cost":0.00058},"completion_tokens_details":{"reasoning_tokens":61,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.27368825s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 1972 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"Ep8DCkgICxABGAIqQMPJIeZ0P/DSe9JQ2wg9NaUiY1fY4A/kD7HwtPBhRsepL0jAqIXyjKajtqj8mKKNj39kCrDFp0b8NOBIbX3e+XASDPK3RtRCSq7Z/Iu0kxoMCL2VPJ0qWJYZyey0IjCjhME7FUWTLD7dhGw2WNWJmQNbsVVq1YyyqPpn8Ap9qdhRPb/0uZM0wZaMR/FW2C0qhALVhWU2Hb3H30vrcYfc5S6wPMnYgNDIAvsif7nvmGrWK8YA+4cd9cPNBIfi/AO/OUkOeXowSVr4F19yt+fcjKXDOff5PfS+j/FeqwcKhG1EIC8SQvnqjAZqTmlPg5B1O8nrVqrUZWr3UEqVKoGUvrEQxKobN+JN/2u+/yQQK3SmrnArp2+N1fusDCz6uq7V1qWhjSzsZKTUO4+lFy0eKCzNFeGFRGFgZTgWdfS/cxiCaZLe0PE35kq6ubKVNGC+C6NVBm3h/bNtqQuWt+19TAX7y8Vk94rBMaEeJsCo81W0EOkhenk5ohDZsvL+8iFcDso5whoraTA0HQViPU1zW+FifZDATBgB","text":" the weather in Florence, Italy. I have a weather function available that takes a location parameter. I should call it with \"Florence, Italy\" or just \"Florence\" as the location. Let me use \"Florence, Italy\" to be specific.","type":"reasoning.text"}],"reasoning":" the weather in Florence, Italy. I have a weather function available that takes a location parameter. I should call it with \"Florence, Italy\" or just \"Florence\" as the location. Let me use \"Florence, Italy\" to be specific."},{"content":"40 C","tool_call_id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","role":"tool"}],"model":"anthropic/claude-haiku-4.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! It's a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" day in Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're planning to visit or travel","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" there","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" wear","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" light clothing","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", and apply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sunscreen.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":738,"completion_tokens":61,"total_tokens":799,"cost":0.001043,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001043,"upstream_inference_prompt_cost":0.000738,"upstream_inference_completions_cost":0.000305},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + + headers: + Content-Type: + - text/event-stream + status: 200 OK + code: 200 + duration: 1.79521675s diff --git a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml new file mode 100644 index 000000000..56bf5836c --- /dev/null +++ b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml @@ -0,0 +1,63 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 508 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945529-4x3WtegraF6F7Hx5vnXk\",\"object\":\"chat.completion\",\"created\":1773945529,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \\\"Florence, Italy\\\" or just \\\"Florence\\\" as the location.\\n\\nLet me call the weather function with \\\"Florence, Italy\\\" to get the weather information.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \\\"Florence, Italy\\\" or just \\\"Florence\\\" as the location.\\n\\nLet me call the weather function with \\\"Florence, Italy\\\" to get the weather information.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"EtsDCkgICxABGAIqQEwZWjOj3+xqUgNiHMa7PU5h2NpcWKGQ5Xz6Z2W6TpuQI8BawgtBcx2w3Ii+aO8SWxb9/FWh7QMQIxpC3V1N9hkSDBF9vqo23Di4tTYwfBoMdcIzCI5hZzhIYBWbIjCcfrx6oOoMUcCgm3R+Mh4goj6nQAzX4NbwlXUaXR0/QLr9IFLrsRIsTNen3kZec+EqwAIPgE2IdMn4w//171eA8fA6vJtlFtkOvwql1e/Znt+i/H4D1XA7wnBBzFJFNe7lXOEMWce3o9eAnzROAyTKtwEPCRVFySVgSWsl1YQ7wOEfT8fisVKp1fpKmpxnHz/gdFVoVE5FcuSMXaBg5fnNCzerUgv2GcImSr86WDSSuLhGiECmVPAeMeZU2zPUkKxIKJeDVxXotEX0MgpS2xZaq/GD/vgbi+DW5aVcSK+IAsSg55/wwwcR/aT95KO+ayT80adkVugVMIBr+CQfQZo40SjguNaxA55Fln6+WclcaRmVfeES54KeYWApJshca+93LwwwvOtpigqpoa0650ftVyLpvcr2dhxArg1K7tguv3wN6MDEvNflxRk3y2u010vPG/ycgT0Mkzs+TIPPlrz+a5S9yZzxUBfP+xKmyquEMTCQnhgB\"}]}}],\"usage\":{\"prompt_tokens\":607,\"completion_tokens\":126,\"total_tokens\":733,\"cost\":0.001237,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001237,\"upstream_inference_prompt_cost\":0.000607,\"upstream_inference_completions_cost\":0.00063},\"completion_tokens_details\":{\"reasoning_tokens\":78,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 5.523986875s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 2170 + host: "" + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EtsDCkgICxABGAIqQEwZWjOj3+xqUgNiHMa7PU5h2NpcWKGQ5Xz6Z2W6TpuQI8BawgtBcx2w3Ii+aO8SWxb9/FWh7QMQIxpC3V1N9hkSDBF9vqo23Di4tTYwfBoMdcIzCI5hZzhIYBWbIjCcfrx6oOoMUcCgm3R+Mh4goj6nQAzX4NbwlXUaXR0/QLr9IFLrsRIsTNen3kZec+EqwAIPgE2IdMn4w//171eA8fA6vJtlFtkOvwql1e/Znt+i/H4D1XA7wnBBzFJFNe7lXOEMWce3o9eAnzROAyTKtwEPCRVFySVgSWsl1YQ7wOEfT8fisVKp1fpKmpxnHz/gdFVoVE5FcuSMXaBg5fnNCzerUgv2GcImSr86WDSSuLhGiECmVPAeMeZU2zPUkKxIKJeDVxXotEX0MgpS2xZaq/GD/vgbi+DW5aVcSK+IAsSg55/wwwcR/aT95KO+ayT80adkVugVMIBr+CQfQZo40SjguNaxA55Fln6+WclcaRmVfeES54KeYWApJshca+93LwwwvOtpigqpoa0650ftVyLpvcr2dhxArg1K7tguv3wN6MDEvNflxRk3y2u010vPG/ycgT0Mkzs+TIPPlrz+a5S9yZzxUBfP+xKmyquEMTCQnhgB","text":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or just \"Florence\" as the location.\n\nLet me call the weather function with \"Florence, Italy\" to get the weather information.","type":"reasoning.text"}],"reasoning":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or just \"Florence\" as the location.\n\nLet me call the weather function with \"Florence, Italy\" to get the weather information."},{"content":"40 C","tool_call_id":"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2","role":"tool"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + url: https://openrouter.ai/api/v1/chat/completions + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945535-J1gXRWEKUu1J0LUdVpFo\",\"object\":\"chat.completion\",\"created\":1773945535,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! \\n\\nThat's typical for Florence during the summer months when temperatures can get quite warm. If you're planning to visit or are currently there, make sure to:\\n- Stay hydrated\\n- Wear light, breathable clothing\\n- Use sunscreen\\n- Try to explore during early morning or late evening hours to avoid the peak heat\\n\\nIs there anything else you'd like to know about the weather or Florence?\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":747,\"completion_tokens\":111,\"total_tokens\":858,\"cost\":0.001302,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001302,\"upstream_inference_prompt_cost\":0.000747,\"upstream_inference_completions_cost\":0.000555},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.309788583s diff --git a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking-streaming.yaml deleted file mode 100644 index e2e45dd27..000000000 --- a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking-streaming.yaml +++ /dev/null @@ -1,137 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 561 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The user is asking for","reasoning_details":[{"type":"reasoning.text","text":"The user is asking for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information for","reasoning_details":[{"type":"reasoning.text","text":" information for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence, Italy. I have access","reasoning_details":[{"type":"reasoning.text","text":" Florence, Italy. I have access","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to a weather function that takes","reasoning_details":[{"type":"reasoning.text","text":" to a weather function that takes","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a location parameter. The location","reasoning_details":[{"type":"reasoning.text","text":" a location parameter. The location","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.text","text":" clearly","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specified","reasoning_details":[{"type":"reasoning.text","text":" specified","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as \"Florence, Italy\" so I","reasoning_details":[{"type":"reasoning.text","text":" as \"Florence, Italy\" so I","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have all the required parameters","reasoning_details":[{"type":"reasoning.text","text":" have all the required parameters","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to make the","reasoning_details":[{"type":"reasoning.text","text":" to make the","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function call.","reasoning_details":[{"type":"reasoning.text","text":" function call.","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_01HKfUyb4tpj4kvPgTuusByf","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"locati"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"on"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\": \"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence, I"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"taly"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning_details":[{"type":"reasoning.text","signature":"EqcDCkgICxACGAIqQM0Cd2vack9XE5bBfQ+UzUmO6mtcCD9QEy7/W2YXPJaAq8xvtMBNeQKGAoNiRvy3r9GXKYMe5MmAW+7LfgsburkSDD2T6pIVGFhXrqFeyBoM5VdxjM6/xX3P78QMIjCWe/6ttXxKOW/sdYJ4JzE4bKGjIuYfTJv+0i8OZkAF/FvXHIKSm8jG0D/Li44mdqkqjAJGEtZwg9srd1Q47ovDJqfU3QaOz7F34UKA+VQ5WhcY8sO1GyjqPYMLxcgo794PsisD6/0pZPqtvBFW28e3sd/iedHI6adxgJs83k5ap/B5rhJY6AJcCjcEfO+Fi7b6CYRElRvWI1vSDIct251jOTZ51tt9T1kw1u6UhoJfIY/SmiEI6AgP3wBpESi7H+bnrX9/w/97V7tbdDclP09MgZqLrt4+ECvNLn04lXXLGQYAOglRm8Tixk1IN4LGV6TJtDngbwk+Be+Zn6kqvJ8bo0BOZJOhRAbgc1HF+kgV4z80aTtBILpbYo0uV/IQRElhU5/Y7sbVTDwRft/bzZxdTdUJN/vqvb+BAkiSbxWCGAE=","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773326264-OoghvABlt3eLCw2WPlqS","object":"chat.completion.chunk","created":1773326264,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":424,"completion_tokens":110,"total_tokens":534,"cost":0.002922,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002922,"upstream_inference_prompt_cost":0.001272,"upstream_inference_completions_cost":0.00165},"completion_tokens_details":{"reasoning_tokens":63,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.00973575s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1991 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_vrtx_01HKfUyb4tpj4kvPgTuusByf","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EqcDCkgICxACGAIqQM0Cd2vack9XE5bBfQ+UzUmO6mtcCD9QEy7/W2YXPJaAq8xvtMBNeQKGAoNiRvy3r9GXKYMe5MmAW+7LfgsburkSDD2T6pIVGFhXrqFeyBoM5VdxjM6/xX3P78QMIjCWe/6ttXxKOW/sdYJ4JzE4bKGjIuYfTJv+0i8OZkAF/FvXHIKSm8jG0D/Li44mdqkqjAJGEtZwg9srd1Q47ovDJqfU3QaOz7F34UKA+VQ5WhcY8sO1GyjqPYMLxcgo794PsisD6/0pZPqtvBFW28e3sd/iedHI6adxgJs83k5ap/B5rhJY6AJcCjcEfO+Fi7b6CYRElRvWI1vSDIct251jOTZ51tt9T1kw1u6UhoJfIY/SmiEI6AgP3wBpESi7H+bnrX9/w/97V7tbdDclP09MgZqLrt4+ECvNLn04lXXLGQYAOglRm8Tixk1IN4LGV6TJtDngbwk+Be+Zn6kqvJ8bo0BOZJOhRAbgc1HF+kgV4z80aTtBILpbYo0uV/IQRElhU5/Y7sbVTDwRft/bzZxdTdUJN/vqvb+BAkiSbxWCGAE=","text":" weather information for Florence, Italy. I have access to a weather function that takes a location parameter. The location is clearly specified as \"Florence, Italy\" so I have all the required parameters to make the function call.","type":"reasoning.text"}],"reasoning":" weather information for Florence, Italy. I have access to a weather function that takes a location parameter. The location is clearly specified as \"Florence, Italy\" so I have all the required parameters to make the function call."},{"content":"40 C","tool_call_id":"toolu_vrtx_01HKfUyb4tpj4kvPgTuusByf","role":"tool"}],"model":"anthropic/claude-sonnet-4","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"reasoning":{"effort":"medium"},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy shows","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" temperature of 40°C (104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"°F). That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"'s quite hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" It's a very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" warm day in Florence.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773326267-RCoDFUZUJvX71yoT5AUB","object":"chat.completion.chunk","created":1773326267,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":549,"completion_tokens":37,"total_tokens":586,"cost":0.002202,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002202,"upstream_inference_prompt_cost":0.001647,"upstream_inference_completions_cost":0.000555},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.070964125s diff --git a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking.yaml deleted file mode 100644 index 53cac413b..000000000 --- a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4-sig/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 507 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773326261-pUI5KeUN113EFRmnGRdE\",\"object\":\"chat.completion\",\"created\":1773326261,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided the location as \\\"Florence, Italy\\\". I have all the required parameters to make the function call.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_015EeDRWGA7dLHZpVKzpowig\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided the location as \\\"Florence, Italy\\\". I have all the required parameters to make the function call.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"Ep0DCkgICxACGAIqQJmzDCDSnhjTLtbQN/8+vA+ikDMrFxdtqj0wHvIeq2oQUBTAQ8VRUYbJXEAcf7aD0WdIMvG1i4JHgNBPvjXICfcSDHw8OBuN4XlGNfRIKxoM4AR3oB+wLCO9h+yDIjCMOl5LPYOG3MdocS6Yi4qPredgXsJ3VnsYteb+2RWXDwu5DdtpxKkHZM8ChTvK28MqggJFV0e2eifv3hGHmfYJ+G0ZmnaeBzlCOd6SvYTq1uKBlLsbsyfXa+o17HVa7lDQRYfDz1Sim54JdlRW1awVl5k8tOXFLyCtR1B7CJyYVjo+2k4bgF8yam6Q3YZwtb8ORR6X4/r1LBnDlkfh+1FjgfmAULXRkZ7/jxBC/2EAEbiDK8dYJWRtMdrKV2r2UmbBbfkp7r4t1RMHqmGSk0pg6lOjKbRdcXbAB8w2Bo+auQNlKOHQNN0PmBLjP69BzMgIQjx0m8byWjYOV6x4l8moRU8GiknhqN8ttSib2KLVlQlKScij8KG53tqF+ltGlhjWoH2PyOvpxIouwr0Bf9qtY+aBBMcYAQ==\"}]}}],\"usage\":{\"prompt_tokens\":424,\"completion_tokens\":110,\"total_tokens\":534,\"cost\":0.002922,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002922,\"upstream_inference_prompt_cost\":0.001272,\"upstream_inference_completions_cost\":0.00165},\"completion_tokens_details\":{\"reasoning_tokens\":61,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.118502s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1949 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_vrtx_015EeDRWGA7dLHZpVKzpowig","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"Ep0DCkgICxACGAIqQJmzDCDSnhjTLtbQN/8+vA+ikDMrFxdtqj0wHvIeq2oQUBTAQ8VRUYbJXEAcf7aD0WdIMvG1i4JHgNBPvjXICfcSDHw8OBuN4XlGNfRIKxoM4AR3oB+wLCO9h+yDIjCMOl5LPYOG3MdocS6Yi4qPredgXsJ3VnsYteb+2RWXDwu5DdtpxKkHZM8ChTvK28MqggJFV0e2eifv3hGHmfYJ+G0ZmnaeBzlCOd6SvYTq1uKBlLsbsyfXa+o17HVa7lDQRYfDz1Sim54JdlRW1awVl5k8tOXFLyCtR1B7CJyYVjo+2k4bgF8yam6Q3YZwtb8ORR6X4/r1LBnDlkfh+1FjgfmAULXRkZ7/jxBC/2EAEbiDK8dYJWRtMdrKV2r2UmbBbfkp7r4t1RMHqmGSk0pg6lOjKbRdcXbAB8w2Bo+auQNlKOHQNN0PmBLjP69BzMgIQjx0m8byWjYOV6x4l8moRU8GiknhqN8ttSib2KLVlQlKScij8KG53tqF+ltGlhjWoH2PyOvpxIouwr0Bf9qtY+aBBMcYAQ==","text":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided the location as \"Florence, Italy\". I have all the required parameters to make the function call.","type":"reasoning.text"}],"reasoning":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. The user has provided the location as \"Florence, Italy\". I have all the required parameters to make the function call."},{"content":"40 C","tool_call_id":"toolu_vrtx_015EeDRWGA7dLHZpVKzpowig","role":"tool"}],"model":"anthropic/claude-sonnet-4","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773326263-swLXYBR1ICuR4npunGV5\",\"object\":\"chat.completion\",\"created\":1773326263,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy is 40°C (104°F). That's quite hot! It's a very warm day in Florence right now.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":549,\"completion_tokens\":36,\"total_tokens\":585,\"cost\":0.002187,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002187,\"upstream_inference_prompt_cost\":0.001647,\"upstream_inference_completions_cost\":0.00054},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.089580291s diff --git a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking-streaming.yaml deleted file mode 100644 index 2417dbfda..000000000 --- a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking-streaming.yaml +++ /dev/null @@ -1,139 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 561 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The user is asking for weather information for","reasoning_details":[{"type":"reasoning.text","text":"The user is asking for weather information for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence, Italy. I have access","reasoning_details":[{"type":"reasoning.text","text":" Florence, Italy. I have access","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to a weather function that requires","reasoning_details":[{"type":"reasoning.text","text":" to a weather function that requires","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a location parameter. The","reasoning_details":[{"type":"reasoning.text","text":" a location parameter. The","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user has provided the location as \"Florence","reasoning_details":[{"type":"reasoning.text","text":" user has provided the location as \"Florence","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", Italy\".","reasoning_details":[{"type":"reasoning.text","text":", Italy\".","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I have","reasoning_details":[{"type":"reasoning.text","text":" I have","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" all the required parameters to make the","reasoning_details":[{"type":"reasoning.text","text":" all the required parameters to make the","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function call.","reasoning_details":[{"type":"reasoning.text","text":" function call.","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_vrtx_01NRAptSJVJEik354SSeQZAs","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"loca"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ti"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"on\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": \"Florence,"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" I"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"taly\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning_details":[{"type":"reasoning.text","signature":"EqkDCkgICxACGAIqQPS7GVr0GXPH6M+WzQ1vKtUqRBHv1LhaC0/WFMQlYmVaM9CGfR2D2LPkjWcVDLyv3VhSBwhzqJ7/TqPBgU19uX8SDNcW4mQhOGZ8NT+CyxoMbbl8zeAq03liEOT4IjCrFqSXlBQ4fKC4vLk5pvUFsStMTVC7lQqOCgx9Wi8wbWQARs0NgwUqMGRaPvyqqKkqjgL/UoXjowlOTTm2Fr7eWoiV5ZakWSRVesu8jBjxWWADiYR6i7YMTq7J32a/5C9br4HoEiD8g8Qdt3wOqrFMZWNhAQQ7kTS6bxYNLPE9SIVRuLyVpcvjcXLZviedK3AJ+EZrO/mx4efFo9TFIQ5vf59fecRWPc4QwJ7bDK4v9s+SLrA6tulpJBmiC3c7ZoaHXRV/qIbBTUDG9yifohjgmYZHo/PARPH7dqxkwYS25UtZHa5r8ENHvPhCuK4CowY8+3dj1qi1NjbR6xJPIrCBW9OZCtIB8/0zdmz6LoY/CCYhuOKPKClNgMoxLUtA79MgcC/kMndvWauXkbk2g2hMRGnOD6yvhGU8Hs1q0y+5yTQYAQ==","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773326256-GfjuN0tRbvSxE7XpT5vu","object":"chat.completion.chunk","created":1773326256,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":424,"completion_tokens":110,"total_tokens":534,"cost":0.002922,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002922,"upstream_inference_prompt_cost":0.001272,"upstream_inference_completions_cost":0.00165},"completion_tokens_details":{"reasoning_tokens":64,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.126881375s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1951 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_vrtx_01NRAptSJVJEik354SSeQZAs","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EqkDCkgICxACGAIqQPS7GVr0GXPH6M+WzQ1vKtUqRBHv1LhaC0/WFMQlYmVaM9CGfR2D2LPkjWcVDLyv3VhSBwhzqJ7/TqPBgU19uX8SDNcW4mQhOGZ8NT+CyxoMbbl8zeAq03liEOT4IjCrFqSXlBQ4fKC4vLk5pvUFsStMTVC7lQqOCgx9Wi8wbWQARs0NgwUqMGRaPvyqqKkqjgL/UoXjowlOTTm2Fr7eWoiV5ZakWSRVesu8jBjxWWADiYR6i7YMTq7J32a/5C9br4HoEiD8g8Qdt3wOqrFMZWNhAQQ7kTS6bxYNLPE9SIVRuLyVpcvjcXLZviedK3AJ+EZrO/mx4efFo9TFIQ5vf59fecRWPc4QwJ7bDK4v9s+SLrA6tulpJBmiC3c7ZoaHXRV/qIbBTUDG9yifohjgmYZHo/PARPH7dqxkwYS25UtZHa5r8ENHvPhCuK4CowY8+3dj1qi1NjbR6xJPIrCBW9OZCtIB8/0zdmz6LoY/CCYhuOKPKClNgMoxLUtA79MgcC/kMndvWauXkbk2g2hMRGnOD6yvhGU8Hs1q0y+5yTQYAQ==","text":" Florence, Italy. I have access to a weather function that requires a location parameter. The user has provided the location as \"Florence, Italy\". I have all the required parameters to make the function call.","type":"reasoning.text"}],"reasoning":" Florence, Italy. I have access to a weather function that requires a location parameter. The user has provided the location as \"Florence, Italy\". I have all the required parameters to make the function call."},{"content":"40 C","tool_call_id":"toolu_vrtx_01NRAptSJVJEik354SSeQZAs","role":"tool"}],"model":"anthropic/claude-sonnet-4","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy is ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"40°C (104°F).","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" That","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"'s quite hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" you're planning to visit or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" currently there, make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" hydrated and seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" shade during the hottest parts","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":" of the day.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773326258-WHvws41Vctn3G2tYV7Ov","object":"chat.completion.chunk","created":1773326258,"model":"anthropic/claude-4-sonnet-20250522","provider":"Google","choices":[],"usage":{"prompt_tokens":549,"completion_tokens":54,"total_tokens":603,"cost":0.002457,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.002457,"upstream_inference_prompt_cost":0.001647,"upstream_inference_completions_cost":0.00081},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.487207542s diff --git a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking.yaml deleted file mode 100644 index 752cdb599..000000000 --- a/providertests/testdata/TestOpenRouterThinking/claude-sonnet-4/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 507 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-sonnet-4","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773326252-Szns4H7bQ8CavE2ZWrAx\",\"object\":\"chat.completion\",\"created\":1773326252,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for weather information for Florence, Italy. I have a weather function available that takes a location parameter. The location is clearly specified as \\\"Florence, Italy\\\". I have all the required parameters to make this function call.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_vrtx_01HKcnQ9ZDwiuVXhno3dysoz\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for weather information for Florence, Italy. I have a weather function available that takes a location parameter. The location is clearly specified as \\\"Florence, Italy\\\". I have all the required parameters to make this function call.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"EqYDCkgICxACGAIqQNsOj6PE+duVt8oIRuUmE1rZG5ZkPG2qzFQyFcuSsHBGk91owFsSSnL9aAHsCVfZBXLeVpw4G3cZkIT2ShMZgkISDKLmsYbF5oVpYVaVwxoMafxjLbaccu2R9CNlIjCiU/SRvlpBflE2InCBHRfWRVGRFjHaw/wSGCSlBdnECQGY9CZ0IQ4b2JzhmTbwSvgqiwIOyHzZtG7qhjvQS+TaGCajalAmW/yu1i+dH29Roi3n4hvCJAuvtH7aR5ilDXyEDXyEG2F6iFmCRmwAeVNBj6WK3f5ZiX4zKJo8I/GLU0J0JVXl5pmf4tHSVVPAQhcC7Y5qL0jCEJjkaDBWriyq7KzMaC23hwRmM35ptVLBqbokDeJiiQsuhVIyENfUd/Btn0VNlPq/Ux9Wd5+afPQa6mgywz+P3Ct3dcrHOKOL/Y+c27d8hmPMDofZLgI8MpN76ArcdL3PAyoNzYx+A5+ewmAHHFOy5i52sTy8vIa298z2M1XlCTp+oY8kT0LbVQX0po/+iaPnii98LVzgV0aWxjgIzVdhtE7C6mxVbgEYAQ==\"}]}}],\"usage\":{\"prompt_tokens\":424,\"completion_tokens\":108,\"total_tokens\":532,\"cost\":0.002892,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002892,\"upstream_inference_prompt_cost\":0.001272,\"upstream_inference_completions_cost\":0.00162},\"completion_tokens_details\":{\"reasoning_tokens\":63,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.615072s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1979 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_vrtx_01HKcnQ9ZDwiuVXhno3dysoz","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EqYDCkgICxACGAIqQNsOj6PE+duVt8oIRuUmE1rZG5ZkPG2qzFQyFcuSsHBGk91owFsSSnL9aAHsCVfZBXLeVpw4G3cZkIT2ShMZgkISDKLmsYbF5oVpYVaVwxoMafxjLbaccu2R9CNlIjCiU/SRvlpBflE2InCBHRfWRVGRFjHaw/wSGCSlBdnECQGY9CZ0IQ4b2JzhmTbwSvgqiwIOyHzZtG7qhjvQS+TaGCajalAmW/yu1i+dH29Roi3n4hvCJAuvtH7aR5ilDXyEDXyEG2F6iFmCRmwAeVNBj6WK3f5ZiX4zKJo8I/GLU0J0JVXl5pmf4tHSVVPAQhcC7Y5qL0jCEJjkaDBWriyq7KzMaC23hwRmM35ptVLBqbokDeJiiQsuhVIyENfUd/Btn0VNlPq/Ux9Wd5+afPQa6mgywz+P3Ct3dcrHOKOL/Y+c27d8hmPMDofZLgI8MpN76ArcdL3PAyoNzYx+A5+ewmAHHFOy5i52sTy8vIa298z2M1XlCTp+oY8kT0LbVQX0po/+iaPnii98LVzgV0aWxjgIzVdhtE7C6mxVbgEYAQ==","text":"The user is asking for weather information for Florence, Italy. I have a weather function available that takes a location parameter. The location is clearly specified as \"Florence, Italy\". I have all the required parameters to make this function call.","type":"reasoning.text"}],"reasoning":"The user is asking for weather information for Florence, Italy. I have a weather function available that takes a location parameter. The location is clearly specified as \"Florence, Italy\". I have all the required parameters to make this function call."},{"content":"40 C","tool_call_id":"toolu_vrtx_01HKcnQ9ZDwiuVXhno3dysoz","role":"tool"}],"model":"anthropic/claude-sonnet-4","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773326254-pDlQFWRf6TjfH8A3APlt\",\"object\":\"chat.completion\",\"created\":1773326254,\"model\":\"anthropic/claude-4-sonnet-20250522\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy is 40°C (104°F). That's quite hot! Make sure to stay hydrated and seek shade if you're planning to be outdoors.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":547,\"completion_tokens\":43,\"total_tokens\":590,\"cost\":0.002286,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002286,\"upstream_inference_prompt_cost\":0.001641,\"upstream_inference_completions_cost\":0.000645},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.258792459s diff --git a/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking-streaming.yaml deleted file mode 100644 index 1170fa78d..000000000 --- a/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking-streaming.yaml +++ /dev/null @@ -1,87 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 563 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"google/gemini-3-pro-preview","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Assessing User Intent**\n\n\\n\\n\n\nI've begun to break down the user's query about Florence's weather. My focus is on extracting the core intent: the need for current weather data. I am dissecting the question to identify all key entities. Specifically, the location (Florence, Italy), and the desired information (weather). This should facilitate the correct function call.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Assessing User Intent**\n\n\\n\\n\n\nI've begun to break down the user's query about Florence's weather. My focus is on extracting the core intent: the need for current weather data. I am dissecting the question to identify all key entities. Specifically, the location (Florence, Italy), and the desired information (weather). This should facilitate the correct function call.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Pinpointing the Tool's Use**\n\n\\n\\n\n\nI'm solidifying the link between the extracted entities and the available tools. I've confirmed that the 'weather' tool is a direct match for the user's intent. Now, I'm concentrating on the parameters needed by this tool. It looks like the 'location' entity is the most critical parameter for the weather function call.\n\n\n","reasoning_details":[{"type":"reasoning.text","text":"**Pinpointing the Tool's Use**\n\n\\n\\n\n\nI'm solidifying the link between the extracted entities and the available tools. I've confirmed that the 'weather' tool is a direct match for the user's intent. Now, I'm concentrating on the parameters needed by this tool. It looks like the 'location' entity is the most critical parameter for the weather function call.\n\n\n","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"CiUBjz1rX+QNZZDaA519jWkmEHkL1bakA2T4Xvum2KvF9e8Ip0JZCmYBjz1rXzYAg5DeuNR0igEJn1YkVzIDEDsN7c183Vby+BpOaHARLB3bHGv0e70ycuaWFo93c9Yrzt2M8YXDZ3QA6egDq8uyFl5d50PS2EkHhW2MAitddmo+CWEKR0/ArMSGIVtXNjoKWAGPPWtf82UQipGTeH2p9JXfgf77tsHltpd9eIOO+OWaVCCGo9sZmhRZli96b2418FXNchuxiGLM+NL6oVtpoS4TAuqrubnNOjRNW3HMQz++9XeCBrB0bpoKoAEBjz1rX4uy8Ad3E1qhSHtFO3Mcijzc8MrMY6p4uVMi15Yd0goRptdXcc8QwAFZQb1vWaZZu1qjycxo5t+a5zbb+VY4JNRAb60Ytc6/kvE/yHKFXUd9RV1fusEsfndZP8WoxsLky/bSDyCnpSdMh3mSzWZsPJbusTRoP4LuNYte4fgdCqDHVLaqc4eyRb/PSbFb6Re1d1GyAOC0JjEc4qEMCpkBAY89a18ChJiGTSg6PLZcSpJw6mic2L821YrJ5p2D08BpQSF+ntq803BNUTfNTqF9J4Za7GYqYob/3D86CHkAmlRgFWkMal7Boz/z4fonHgxmnCJ4x9TtE2w0YvBCrXSNDb30wg/DPHm8QGvj6kn1DEv0ZoKUeMmj6ZN8qWhhPHiKqQ/XgO2mRl7NLmFAey5HZv9OaNtNa768CkcBjz1rXw34o+sxxk0yPfe/P0+jPpB1ZQqPhIHI/pR4EwVJfUThCyILiIh0tJPqFuKAhaxE4CRwq06SvO2RkWTZFHQamLhSzQoiAY89a18xSodo3zwA3KYOLPuT8LyRSApnEE9lvwmPQ7X8iQ==","format":"google-gemini-v1","id":"tool_weather_wJMhKbJOiIeWsXDA84qT","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_wJMhKbJOiIeWsXDA84qT","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773324252-euYchQc6cJybvZVcHvS8","object":"chat.completion.chunk","created":1773324252,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":28,"completion_tokens":120,"total_tokens":148,"cost":0.001496,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001496,"upstream_inference_prompt_cost":0.000056,"upstream_inference_completions_cost":0.00144},"completion_tokens_details":{"reasoning_tokens":111,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 6.221147583s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2677 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_wJMhKbJOiIeWsXDA84qT","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"google-gemini-v1","index":0,"text":"**Assessing User Intent**\n\n\\n\\n\n\nI''ve begun to break down the user''s query about Florence''s weather. My focus is on extracting the core intent: the need for current weather data. I am dissecting the question to identify all key entities. Specifically, the location (Florence, Italy), and the desired information (weather). This should facilitate the correct function call.\n\n\n**Pinpointing the Tool''s Use**\n\n\\n\\n\n\nI''m solidifying the link between the extracted entities and the available tools. I''ve confirmed that the ''weather'' tool is a direct match for the user''s intent. Now, I''m concentrating on the parameters needed by this tool. It looks like the ''location'' entity is the most critical parameter for the weather function call.\n\n\n","type":"reasoning.text"},{"data":"CiUBjz1rX+QNZZDaA519jWkmEHkL1bakA2T4Xvum2KvF9e8Ip0JZCmYBjz1rXzYAg5DeuNR0igEJn1YkVzIDEDsN7c183Vby+BpOaHARLB3bHGv0e70ycuaWFo93c9Yrzt2M8YXDZ3QA6egDq8uyFl5d50PS2EkHhW2MAitddmo+CWEKR0/ArMSGIVtXNjoKWAGPPWtf82UQipGTeH2p9JXfgf77tsHltpd9eIOO+OWaVCCGo9sZmhRZli96b2418FXNchuxiGLM+NL6oVtpoS4TAuqrubnNOjRNW3HMQz++9XeCBrB0bpoKoAEBjz1rX4uy8Ad3E1qhSHtFO3Mcijzc8MrMY6p4uVMi15Yd0goRptdXcc8QwAFZQb1vWaZZu1qjycxo5t+a5zbb+VY4JNRAb60Ytc6/kvE/yHKFXUd9RV1fusEsfndZP8WoxsLky/bSDyCnpSdMh3mSzWZsPJbusTRoP4LuNYte4fgdCqDHVLaqc4eyRb/PSbFb6Re1d1GyAOC0JjEc4qEMCpkBAY89a18ChJiGTSg6PLZcSpJw6mic2L821YrJ5p2D08BpQSF+ntq803BNUTfNTqF9J4Za7GYqYob/3D86CHkAmlRgFWkMal7Boz/z4fonHgxmnCJ4x9TtE2w0YvBCrXSNDb30wg/DPHm8QGvj6kn1DEv0ZoKUeMmj6ZN8qWhhPHiKqQ/XgO2mRl7NLmFAey5HZv9OaNtNa768CkcBjz1rXw34o+sxxk0yPfe/P0+jPpB1ZQqPhIHI/pR4EwVJfUThCyILiIh0tJPqFuKAhaxE4CRwq06SvO2RkWTZFHQamLhSzQoiAY89a18xSodo3zwA3KYOLPuT8LyRSApnEE9lvwmPQ7X8iQ==","format":"google-gemini-v1","id":"tool_weather_wJMhKbJOiIeWsXDA84qT","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_wJMhKbJOiIeWsXDA84qT","role":"tool"}],"model":"google/gemini-3-pro-preview","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324260-cfneHKlNa3n1Gl0DPBly","object":"chat.completion.chunk","created":1773324260,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"The weather in Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324260-cfneHKlNa3n1Gl0DPBly","object":"chat.completion.chunk","created":1773324260,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":", Italy, currently feels quite hot at 40°C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324260-cfneHKlNa3n1Gl0DPBly","object":"chat.completion.chunk","created":1773324260,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}]} - - data: {"id":"gen-1773324260-cfneHKlNa3n1Gl0DPBly","object":"chat.completion.chunk","created":1773324260,"model":"google/gemini-3-pro-preview-20251117","provider":"Google","choices":[],"usage":{"prompt_tokens":56,"completion_tokens":18,"total_tokens":74,"cost":0.000328,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000328,"upstream_inference_prompt_cost":0.000112,"upstream_inference_completions_cost":0.000216},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 4.672774791s diff --git a/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking.yaml deleted file mode 100644 index 26a9b853e..000000000 --- a/providertests/testdata/TestOpenRouterThinking/gemini-3-pro-preview/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 509 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"google/gemini-3-pro-preview","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324241-tqjIYrNEmA40cPRRnkOm\",\"object\":\"chat.completion\",\"created\":1773324241,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Defining the User's Intent**\\n\\nI've just begun dissecting the user's request. I'm focusing on pinpointing the core need: the user desires current weather conditions, specifically for Florence, Italy. The key is understanding the type of information they seek and the specified location.\\n\\n\\n**Identifying Necessary Data Sources**\\n\\nNow, I'm concentrating on the resources needed. It's clear I'll require an external API or weather service to retrieve the Florence weather data. I'm considering which service would be most reliable and readily accessible. I will need to ensure the response adheres to the user's need, presenting current conditions.\\n\\n\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_Bn0mvxtpCZhM3MQlxpIi\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"**Defining the User's Intent**\\n\\nI've just begun dissecting the user's request. I'm focusing on pinpointing the core need: the user desires current weather conditions, specifically for Florence, Italy. The key is understanding the type of information they seek and the specified location.\\n\\n\\n**Identifying Necessary Data Sources**\\n\\nNow, I'm concentrating on the resources needed. It's clear I'll require an external API or weather service to retrieve the Florence weather data. I'm considering which service would be most reliable and readily accessible. I will need to ensure the response adheres to the user's need, presenting current conditions.\\n\\n\\n\",\"format\":\"google-gemini-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"CmIBjz1rX3+FHcC7Xt5yjwtDTiyVFmnBF0ZuAMrQYB/cbWdXb1BnYOjGOqnDrs6o7qQ4SXzsEsC1xHhreiaFBYcb2BsEjYgTFBOvdJFusPAtu72lR0J2xXkH6y/V2r3q7DC/GQpPAY89a1+2wNqcTWdwaHOIAln4Gq391baKoDXog6q3Kp5H8/bNOUUJ884J8TEcgrZ0MxmG+esM4gL9/3J23HyaEKDuP/5Vu+yLrDOmOuXeYwquAQGPPWtfkIXJnkFNsREe8hiB5gM6hLr2orWnRiOKGwlMMjJO05jXgWQZMTVh4TukZyaVCyJbzgqF+V/RVGx5k6uZcLD1K8r6kqKCYpXmef5ny0Be9XR7I0FxlWbdndPeAbWDPlAkxDCODjcKrD9bV0Mvia29CV/XWJ7mV96VoCQJECFMr7IHjkFely8OyagBDI0DAvGFfhm+S4REnVDK+mAIqkPVJ8MbismopLNWZAqlAQGPPWtfqrmAveUW67ZB0n+DaIRRCpWX4I6PWmo8H97Zk4BBM0wyW95ix4QjCY1GodCSev8PrkHTKTEc5KCZnBa7QZjwLFw97knBrLmMNvCRMEp+wJMNPyy9X3h7BqovTl4dT00gS+prCqSIvFsqAz0e8wmj21pp3pGb8Mc/P6gSfpVo4ie2GjBKaXeNbUpXNjtak39HRVrpdoqqm3JTRX8j/SNk5w==\",\"format\":\"google-gemini-v1\",\"id\":\"tool_weather_Bn0mvxtpCZhM3MQlxpIi\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":28,\"completion_tokens\":103,\"total_tokens\":131,\"cost\":0.001292,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001292,\"upstream_inference_prompt_cost\":0.000056,\"upstream_inference_completions_cost\":0.001236},\"completion_tokens_details\":{\"reasoning_tokens\":94,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 5.58624325s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1615 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_Bn0mvxtpCZhM3MQlxpIi","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"CmIBjz1rX3+FHcC7Xt5yjwtDTiyVFmnBF0ZuAMrQYB/cbWdXb1BnYOjGOqnDrs6o7qQ4SXzsEsC1xHhreiaFBYcb2BsEjYgTFBOvdJFusPAtu72lR0J2xXkH6y/V2r3q7DC/GQpPAY89a1+2wNqcTWdwaHOIAln4Gq391baKoDXog6q3Kp5H8/bNOUUJ884J8TEcgrZ0MxmG+esM4gL9/3J23HyaEKDuP/5Vu+yLrDOmOuXeYwquAQGPPWtfkIXJnkFNsREe8hiB5gM6hLr2orWnRiOKGwlMMjJO05jXgWQZMTVh4TukZyaVCyJbzgqF+V/RVGx5k6uZcLD1K8r6kqKCYpXmef5ny0Be9XR7I0FxlWbdndPeAbWDPlAkxDCODjcKrD9bV0Mvia29CV/XWJ7mV96VoCQJECFMr7IHjkFely8OyagBDI0DAvGFfhm+S4REnVDK+mAIqkPVJ8MbismopLNWZAqlAQGPPWtfqrmAveUW67ZB0n+DaIRRCpWX4I6PWmo8H97Zk4BBM0wyW95ix4QjCY1GodCSev8PrkHTKTEc5KCZnBa7QZjwLFw97knBrLmMNvCRMEp+wJMNPyy9X3h7BqovTl4dT00gS+prCqSIvFsqAz0e8wmj21pp3pGb8Mc/P6gSfpVo4ie2GjBKaXeNbUpXNjtak39HRVrpdoqqm3JTRX8j/SNk5w==","format":"google-gemini-v1","id":"tool_weather_Bn0mvxtpCZhM3MQlxpIi","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_Bn0mvxtpCZhM3MQlxpIi","role":"tool"}],"model":"google/gemini-3-pro-preview","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324247-CXxmKIMUEgjDsHWB1jUV\",\"object\":\"chat.completion\",\"created\":1773324247,\"model\":\"google/gemini-3-pro-preview-20251117\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"It looks like it is currently 40°C (104°F) in Florence, Italy.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":54,\"completion_tokens\":23,\"total_tokens\":77,\"cost\":0.000384,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000384,\"upstream_inference_prompt_cost\":0.000108,\"upstream_inference_completions_cost\":0.000276},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 4.894801375s diff --git a/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking-streaming.yaml deleted file mode 100644 index c47302053..000000000 --- a/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking-streaming.yaml +++ /dev/null @@ -1,347 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 548 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"z-ai/glm-4.6","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" access","reasoning_details":[{"type":"reasoning.text","text":" access","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" get","reasoning_details":[{"type":"reasoning.text","text":" get","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" requires","reasoning_details":[{"type":"reasoning.text","text":" requires","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"location","reasoning_details":[{"type":"reasoning.text","text":"location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" has","reasoning_details":[{"type":"reasoning.text","text":" has","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flo","reasoning_details":[{"type":"reasoning.text","text":"Flo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"rence","reasoning_details":[{"type":"reasoning.text","text":"rence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they","reasoning_details":[{"type":"reasoning.text","text":" they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" want","reasoning_details":[{"type":"reasoning.text","text":" want","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" exact","reasoning_details":[{"type":"reasoning.text","text":" exact","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" value","reasoning_details":[{"type":"reasoning.text","text":" value","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" check","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_a0979b6107624af58e5b7301","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773324289-yVgLDEWUCYmaq8QFAuyM","object":"chat.completion.chunk","created":1773324289,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":173,"completion_tokens":93,"total_tokens":266,"cost":0.00022451,"is_byok":false,"prompt_tokens_details":{"cached_tokens":171,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00022451,"upstream_inference_prompt_cost":0.00001991,"upstream_inference_completions_cost":0.0002046},"completion_tokens_details":{"reasoning_tokens":67,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.196639625s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1277 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"call_a0979b6107624af58e5b7301","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking for the weather in Florence, Italy. I have access to a weather function that can get weather information for a location. The function requires a \"location\" parameter, and the user has provided \"Florence, Italy\" as the location they want weather for. I should use this exact value for the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_a0979b6107624af58e5b7301","role":"tool"}],"model":"z-ai/glm-4.6","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" temperature","reasoning_details":[{"type":"reasoning.text","text":" temperature","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.text","text":"°C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.text","text":" present","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.text","text":" clearly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"'s","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" definitely","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" there","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" right","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":" now","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - - data: {"id":"gen-1773324292-Uc9rw1I8C32qLslHJqNy","object":"chat.completion.chunk","created":1773324292,"model":"z-ai/glm-4.6","provider":"Novita","choices":[],"usage":{"prompt_tokens":271,"completion_tokens":58,"total_tokens":329,"cost":0.00020097,"is_byok":false,"prompt_tokens_details":{"cached_tokens":172,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00020097,"upstream_inference_prompt_cost":0.00007337,"upstream_inference_completions_cost":0.0001276},"completion_tokens_details":{"reasoning_tokens":30,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.443023166s diff --git a/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking.yaml deleted file mode 100644 index b8dc4e9e7..000000000 --- a/providertests/testdata/TestOpenRouterThinking/glm-4.6/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 494 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"z-ai/glm-4.6","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324264-zLIoP8fSCwx9eMKIQfaM\",\"object\":\"chat.completion\",\"created\":1773324264,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Novita\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll check the weather in Florence, Italy for you.\",\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user has provided the location as \\\"Florence, Italy\\\". I should use this exact value for the location parameter.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_23a2f527539f497aba9f1a3f\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user has provided the location as \\\"Florence, Italy\\\". I should use this exact value for the location parameter.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":173,\"completion_tokens\":74,\"total_tokens\":247,\"cost\":0.00023947,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00023947,\"upstream_inference_prompt_cost\":0.00007667,\"upstream_inference_completions_cost\":0.0001628},\"completion_tokens_details\":{\"reasoning_tokens\":48,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.5784375s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1136 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"content":"I''ll check the weather in Florence, Italy for you.","tool_calls":[{"id":"call_23a2f527539f497aba9f1a3f","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter. The user has provided the location as \"Florence, Italy\". I should use this exact value for the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_23a2f527539f497aba9f1a3f","role":"tool"}],"model":"z-ai/glm-4.6","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324267-Nbo1eOWMmtUgtxF6g62q\",\"object\":\"chat.completion\",\"created\":1773324267,\"model\":\"z-ai/glm-4.6\",\"provider\":\"Together\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently 40°C (104°F). That's quite hot! Make sure to stay hydrated and seek shade if you're out and about.\",\"refusal\":null,\"reasoning\":\"The weather function returned \\\"40 C\\\" which indicates the temperature is 40 degrees Celsius in Florence, Italy. That's quite hot! I should provide this information to the user in a clear and helpful way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned \\\"40 C\\\" which indicates the temperature is 40 degrees Celsius in Florence, Italy. That's quite hot! I should provide this information to the user in a clear and helpful way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":253,\"completion_tokens\":79,\"total_tokens\":332,\"cost\":0.0003256,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003256,\"upstream_inference_prompt_cost\":0.0001518,\"upstream_inference_completions_cost\":0.0001738},\"completion_tokens_details\":{\"reasoning_tokens\":51,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 10.151799166s diff --git a/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking-streaming.yaml deleted file mode 100644 index a400161df..000000000 --- a/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking-streaming.yaml +++ /dev/null @@ -1,307 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 548 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"openai/gpt-5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**Fetching","reasoning_details":[{"type":"reasoning.summary","summary":"**Fetching","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" info","reasoning_details":[{"type":"reasoning.summary","summary":" info","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n\nI","reasoning_details":[{"type":"reasoning.summary","summary":"**\n\nI","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" see","reasoning_details":[{"type":"reasoning.summary","summary":" see","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.summary","summary":" asking","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.summary","summary":" about","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"’ll","reasoning_details":[{"type":"reasoning.summary","summary":"’ll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specifically","reasoning_details":[{"type":"reasoning.summary","summary":" specifically","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calling","reasoning_details":[{"type":"reasoning.summary","summary":" calling","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" functions","reasoning_details":[{"type":"reasoning.summary","summary":" functions","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".weather","reasoning_details":[{"type":"reasoning.summary","summary":".weather","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.summary","summary":" location","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specified","reasoning_details":[{"type":"reasoning.summary","summary":" specified","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.summary","summary":" Since","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" only","reasoning_details":[{"type":"reasoning.summary","summary":" only","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" one","reasoning_details":[{"type":"reasoning.summary","summary":" one","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" don't","reasoning_details":[{"type":"reasoning.summary","summary":" don't","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.summary","summary":" have","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" worry","reasoning_details":[{"type":"reasoning.summary","summary":" worry","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.summary","summary":" about","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parallel","reasoning_details":[{"type":"reasoning.summary","summary":" parallel","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wrapper","reasoning_details":[{"type":"reasoning.summary","summary":" wrapper","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.summary","summary":" need","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" keep","reasoning_details":[{"type":"reasoning.summary","summary":" keep","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" mind","reasoning_details":[{"type":"reasoning.summary","summary":" mind","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.summary","summary":" function","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" might","reasoning_details":[{"type":"reasoning.summary","summary":" might","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" return","reasoning_details":[{"type":"reasoning.summary","summary":" return","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" mocked","reasoning_details":[{"type":"reasoning.summary","summary":" mocked","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" object","reasoning_details":[{"type":"reasoning.summary","summary":" object","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.summary","summary":" but","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"’ll","reasoning_details":[{"type":"reasoning.summary","summary":"’ll","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" proceed","reasoning_details":[{"type":"reasoning.summary","summary":" proceed","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.summary","summary":" call","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" get","reasoning_details":[{"type":"reasoning.summary","summary":" get","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.summary","summary":" information","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.summary","summary":"!","format":"openai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"gAAAAABpssfPPBuXIeT1toiuWv9_i_vBHisxGb9dWM1Por_xBibo5FCvcdZNYlOnt999JwMCbei0yQH2r_PrWzmnBEQpIVAKyLBm7bcvwCcr5-wfXy-XX26WXaQWJP_fwDnFcOmn0d0BfIfVQg56qKWBV5jtny9AYb-FvopEEXRtbLSgy1_PtKWMaqi8pD3zzkEoKucXPEMTkP0n0DtxAxDfvuYteixrJgrZ4qqwdMgKwnVsCrybtHARja7gpkc7qEV3xYbDak2SovVIE4lEXufYmfsDP3muyPhS8fBd5GdtgreE5EFXrzigbSZlHM93swhnb_J4Z4d3-Cr8mxEBemKhQFlXnLRKXaj16bqfE_2hvP6Z93IiGQFpw7lae5rYoldDV7hPO-RIiQKkdn1l5uFZhhFhRRRCHjVtsx0WcSe7ySYMUcSdYSwLO_HdGrWiO6LTSO05MstqmgedeG3UNiVsFJ1eE3G1mVoa-sQtdBSdCILHa5wSRHnwNsBXLjf-_Tqtr84sPynCALl7lEMl6eqd1xkFKXcowgVZlNaCpMFrW2742AyPziU1oShb4t2EiDgCxdZNWAz-vE1YoEry3nKXz4_HDH7m9MLqmAEFHJjMtG5y6z0uUGjKPAN-21Jrg5-waw7aIdDsdK5toNB2-DX19lKAK4ktdQMONTpYa7MEKH0ZQS_6HR04LB5n0sGpvdIpe_FlNT4uwIXvc-r5vRuSnwZjmewgxonFwWp57a6x4xaG0Ymf9QygIAiUtwtdYgI9Y_xbxAxlGoZbvNcst3X8CBwtMaZixA930BiqRHPtkgy_LojAK6bMOH5DoWU7yOTjMGt9vuy0BXbmewQ4IoxvC_mbjpi8s7I0EUZWMwi_WlKsdMgacxfkO4QRZWDm7V_b3denqESZI_7AVRu3BrNYXUOTXL8qGOuKlONCowKHhWjzqPdrwV9BvombARXAGFD3s7PeqYORZ8RGFgCcqpM8GMRblIlG5JRfQI1QjsVQBO8hDJTuLx2L4nAC1O3LTTbdqVCMdz-FKFacwdRo-kAl6K3XgZXAYYQgOe960kFeUGD7FAsQ9HYlUavKx_OdqUUZcseU59y5VwT_cjtTll2csudcV0TvvzD_2Qz7i7ZyMI7dRocgEU1n4XbwhSJyjtWd3fv8CO-tqcPGXNEZ3fTzZjyvUK7_qr9Pp54kUerDFcmx84hbiZF-z6RRZTBNW4B3pnXLkKYKcLJw2gkpB-5PeNV3OoXIaLiudg45_27_1v0IToREjpGTefLYoRbyJ8TDMDWVQZXbW5vEA8EeDLqsZteHz6ihj0o1J7eb8MlDlIqMYLvH5dbcXLBrByFWtznfnRX8TQdkz3jDtNEZ92TneK7GRzhkpAfaj1A88ItBDQysP36mWb3v3Lwa9UZ9B7_KGiO-Bs4OdOtYtzJa9kvVzf55wnnbgQ==","format":"openai-responses-v1","id":"rs_0b3e532ad7ee644a0169b2c7ca703c81949bc437e0c4c64b39","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_PMwetLXlgdc65yX0cHoLY3SM","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773324233-7bbCvshdLdDQrXb5TMah","object":"chat.completion.chunk","created":1773324233,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":63,"completion_tokens":116,"total_tokens":179,"cost":0.00123875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00123875,"upstream_inference_prompt_cost":0.00007875,"upstream_inference_completions_cost":0.00116},"completion_tokens_details":{"reasoning_tokens":64,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 463.578542ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2911 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"call_PMwetLXlgdc65yX0cHoLY3SM","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"openai-responses-v1","index":0,"summary":"**Fetching weather info**\n\nI see the user is asking about the weather in Florence, Italy. I’ll use the weather tool, specifically calling functions.weather with the location specified. Since I only need to use one tool, I don''t have to worry about the parallel tool wrapper. I need to keep in mind that the function might return a mocked object, but I’ll proceed with the call to get the information for the user!","type":"reasoning.summary"},{"data":"gAAAAABpssfPPBuXIeT1toiuWv9_i_vBHisxGb9dWM1Por_xBibo5FCvcdZNYlOnt999JwMCbei0yQH2r_PrWzmnBEQpIVAKyLBm7bcvwCcr5-wfXy-XX26WXaQWJP_fwDnFcOmn0d0BfIfVQg56qKWBV5jtny9AYb-FvopEEXRtbLSgy1_PtKWMaqi8pD3zzkEoKucXPEMTkP0n0DtxAxDfvuYteixrJgrZ4qqwdMgKwnVsCrybtHARja7gpkc7qEV3xYbDak2SovVIE4lEXufYmfsDP3muyPhS8fBd5GdtgreE5EFXrzigbSZlHM93swhnb_J4Z4d3-Cr8mxEBemKhQFlXnLRKXaj16bqfE_2hvP6Z93IiGQFpw7lae5rYoldDV7hPO-RIiQKkdn1l5uFZhhFhRRRCHjVtsx0WcSe7ySYMUcSdYSwLO_HdGrWiO6LTSO05MstqmgedeG3UNiVsFJ1eE3G1mVoa-sQtdBSdCILHa5wSRHnwNsBXLjf-_Tqtr84sPynCALl7lEMl6eqd1xkFKXcowgVZlNaCpMFrW2742AyPziU1oShb4t2EiDgCxdZNWAz-vE1YoEry3nKXz4_HDH7m9MLqmAEFHJjMtG5y6z0uUGjKPAN-21Jrg5-waw7aIdDsdK5toNB2-DX19lKAK4ktdQMONTpYa7MEKH0ZQS_6HR04LB5n0sGpvdIpe_FlNT4uwIXvc-r5vRuSnwZjmewgxonFwWp57a6x4xaG0Ymf9QygIAiUtwtdYgI9Y_xbxAxlGoZbvNcst3X8CBwtMaZixA930BiqRHPtkgy_LojAK6bMOH5DoWU7yOTjMGt9vuy0BXbmewQ4IoxvC_mbjpi8s7I0EUZWMwi_WlKsdMgacxfkO4QRZWDm7V_b3denqESZI_7AVRu3BrNYXUOTXL8qGOuKlONCowKHhWjzqPdrwV9BvombARXAGFD3s7PeqYORZ8RGFgCcqpM8GMRblIlG5JRfQI1QjsVQBO8hDJTuLx2L4nAC1O3LTTbdqVCMdz-FKFacwdRo-kAl6K3XgZXAYYQgOe960kFeUGD7FAsQ9HYlUavKx_OdqUUZcseU59y5VwT_cjtTll2csudcV0TvvzD_2Qz7i7ZyMI7dRocgEU1n4XbwhSJyjtWd3fv8CO-tqcPGXNEZ3fTzZjyvUK7_qr9Pp54kUerDFcmx84hbiZF-z6RRZTBNW4B3pnXLkKYKcLJw2gkpB-5PeNV3OoXIaLiudg45_27_1v0IToREjpGTefLYoRbyJ8TDMDWVQZXbW5vEA8EeDLqsZteHz6ihj0o1J7eb8MlDlIqMYLvH5dbcXLBrByFWtznfnRX8TQdkz3jDtNEZ92TneK7GRzhkpAfaj1A88ItBDQysP36mWb3v3Lwa9UZ9B7_KGiO-Bs4OdOtYtzJa9kvVzf55wnnbgQ==","format":"openai-responses-v1","id":"rs_0b3e532ad7ee644a0169b2c7ca703c81949bc437e0c4c64b39","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"call_PMwetLXlgdc65yX0cHoLY3SM","role":"tool"}],"model":"openai/gpt-5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"’s","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" about","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" avoid","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" strenuous","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" activity","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" during","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" peak","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" afternoon","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" heat","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773324239-e0BJ1jt1aVz5MikrC47p","object":"chat.completion.chunk","created":1773324239,"model":"openai/gpt-5-2025-08-07","provider":"OpenAI","choices":[],"usage":{"prompt_tokens":188,"completion_tokens":27,"total_tokens":215,"cost":0.000505,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000505,"upstream_inference_prompt_cost":0.000235,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 501.2125ms diff --git a/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking.yaml deleted file mode 100644 index a5798b1a8..000000000 --- a/providertests/testdata/TestOpenRouterThinking/gpt-5/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 494 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"openai/gpt-5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"reasoning":{"effort":"medium"}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324215-D7lh5CAt7ZjqsjO9zT2D\",\"object\":\"chat.completion\",\"created\":1773324215,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"**Checking Florence's weather**\\n\\nI need to find out the weather in Florence, Italy. I have a tool called \\\"functions.weather\\\" to help with that. Since we only need one tool, I won't use the multi_tool_use.parallel wrapper. I'll call functions.weather with the location specified as \\\"Florence, Italy.\\\" The tool should return the weather data, so I need to access it through the commentary channel. Alright, let's get that information!\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_vYXwqorxYJ1SpkxBfbomGrs4\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Checking Florence's weather**\\n\\nI need to find out the weather in Florence, Italy. I have a tool called \\\"functions.weather\\\" to help with that. Since we only need one tool, I won't use the multi_tool_use.parallel wrapper. I'll call functions.weather with the location specified as \\\"Florence, Italy.\\\" The tool should return the weather data, so I need to access it through the commentary channel. Alright, let's get that information!\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpsse-I3DUazhapsT1MmHUYmjPW-feTxEb00nSJjtoH6gV_VS280fGY9VT2yKknwM0Aa2ypjI7rDew9B-o9fhwfpv2LHVD1l0pCh0Nqny-HFbOXLxMlaPXw48ysjMFkVDLXaQvCeMDt02gflkSwIubMS2PVTY3KtZ-YAlIKX133lav5jemWVmD006JPf4CV9931bdvsBIcpub27Zc79CYvbW81DweY0dNn6Zy0PqJRgOXN4RLSFgGOrTCiOuYUVzfPA49Q0SFILvkoJ8-1ZtTn0I3Spe_pMtED_VItwTdlSnVF28EgCMZafLs_EiROECRI76moLdURNk3cc5XM6Fk22OI3LHy5G9zO-VGcfVZiXDfRpJvUdYlGINdxzd3Yo0qhMY6r48luUM_WC8NY5qdV5MSuaZ5QkMHPQYj10Tdm4PTA85CHUeI4vVSkF_gMPI98ABGoq-YFlGN1KMzfHGpW-o_wn6GdXhmUUYOAUMcYHlgCh7vaQRbfShnm8YYOkPWkqON8NOOoC-JI7n_FgnK4Kz4F56bECUzS3nal1QoERK96ByoOR9mqVW21hauzeZhIUrpykI1hTaZiquWP0nacuDmW9n8CNboNQvrzCqclcKygMHL1St_kGGKMlnp72i6YBw-LFzYLNPwYT6Cr-Ru7wVSdL-UYN-hyqoPiRAqGzla4sLrWvn7bFv5g_GjgkAleHZzdwbLt9_1ICyOYMJVFTrfXJqjXU1XMnAhLU0Qn2nYRKy47M-R7HQoW51lmt4-_IdY_HQ7VISDpfWzCAYyyn-MuRoGhbJ2C8rSc1O07NXwYddFlTqwO8DKyMutCk7hkoMEUeSmnbIszN3oZfwxK-x9DKH7YX_0a_dBbe_WqlA9yJGLD19u78AGYoZ_NMSiGIp3O2Ihtc_FtVQkKuLU70aAP2OhuFtx3uLnBqEzw1ipzCwwyObD-Z3Ts1POtSveNfdNaLtzTLlgvO6DzoXqjIKdacwhDXpbmfDIFIufhwA5qRj7eMLg3VDx5QNW23aXe7_1YMcu_sVZOA2BZzvSkp2wfpKf7UzeBx8TWSav5PwO6HYEPsV61kxuUT6XJLpagFN6sRXYdtCVtu-Q3oBm4mWNv4-c1VsctE_AK21RLjtxZV70AXDbK-iS6-hr-1dgSKUYATofXRr4bbeKvev5CTirDgA4g593QzP0q0cGZbqClPzfRRF-cl82u4MAP7jWyeKaJ4B9NtIhYPSZxkhH0kUhak3iM6c-39LWApJu_Cj_NOvzBHSSgZj15tlX5WOR66gzOQgGWH4ODiBqr43miy6pyvm4nhKxJd1N7xtnT4kEXVEjdMz8RsP-fgyIcXC4wM8j7XojsChYI53pkUUzG8NbbdNw1yk0z41hY9dzaV8yyFaXhR8KjDsuY7MCzSDOX8KDdcUwQKU48jPAb6etYgKV9XBTgiIadnvdqLGDcA2Y_cTvE-c5-1uuX5tadJO0BB0-2cbqZxmHoaOLBVXlujTkzh5H1f98nhLf0XmDK5Qaps_OcpzOcGCkDfPjSwZ3_LrlnI2G3Mi6m9el54mKujXcSC-oVk0V2KB7H9U60xX1JiXFxDhw3xR6B0W_okMFkI-pbsTkLKOZVU_F6oFxpl9Q5cQCUebRYziAfj27FN_tpT_I=\",\"format\":\"openai-responses-v1\",\"id\":\"rs_0caf9667a75d08220169b2c7b86c9881969d898ea9b7780716\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":63,\"completion_tokens\":148,\"total_tokens\":211,\"cost\":0.00155875,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00155875,\"upstream_inference_prompt_cost\":0.00007875,\"upstream_inference_completions_cost\":0.00148},\"completion_tokens_details\":{\"reasoning_tokens\":64,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 555.081ms -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 2567 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"call_vYXwqorxYJ1SpkxBfbomGrs4","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"gAAAAABpsse-I3DUazhapsT1MmHUYmjPW-feTxEb00nSJjtoH6gV_VS280fGY9VT2yKknwM0Aa2ypjI7rDew9B-o9fhwfpv2LHVD1l0pCh0Nqny-HFbOXLxMlaPXw48ysjMFkVDLXaQvCeMDt02gflkSwIubMS2PVTY3KtZ-YAlIKX133lav5jemWVmD006JPf4CV9931bdvsBIcpub27Zc79CYvbW81DweY0dNn6Zy0PqJRgOXN4RLSFgGOrTCiOuYUVzfPA49Q0SFILvkoJ8-1ZtTn0I3Spe_pMtED_VItwTdlSnVF28EgCMZafLs_EiROECRI76moLdURNk3cc5XM6Fk22OI3LHy5G9zO-VGcfVZiXDfRpJvUdYlGINdxzd3Yo0qhMY6r48luUM_WC8NY5qdV5MSuaZ5QkMHPQYj10Tdm4PTA85CHUeI4vVSkF_gMPI98ABGoq-YFlGN1KMzfHGpW-o_wn6GdXhmUUYOAUMcYHlgCh7vaQRbfShnm8YYOkPWkqON8NOOoC-JI7n_FgnK4Kz4F56bECUzS3nal1QoERK96ByoOR9mqVW21hauzeZhIUrpykI1hTaZiquWP0nacuDmW9n8CNboNQvrzCqclcKygMHL1St_kGGKMlnp72i6YBw-LFzYLNPwYT6Cr-Ru7wVSdL-UYN-hyqoPiRAqGzla4sLrWvn7bFv5g_GjgkAleHZzdwbLt9_1ICyOYMJVFTrfXJqjXU1XMnAhLU0Qn2nYRKy47M-R7HQoW51lmt4-_IdY_HQ7VISDpfWzCAYyyn-MuRoGhbJ2C8rSc1O07NXwYddFlTqwO8DKyMutCk7hkoMEUeSmnbIszN3oZfwxK-x9DKH7YX_0a_dBbe_WqlA9yJGLD19u78AGYoZ_NMSiGIp3O2Ihtc_FtVQkKuLU70aAP2OhuFtx3uLnBqEzw1ipzCwwyObD-Z3Ts1POtSveNfdNaLtzTLlgvO6DzoXqjIKdacwhDXpbmfDIFIufhwA5qRj7eMLg3VDx5QNW23aXe7_1YMcu_sVZOA2BZzvSkp2wfpKf7UzeBx8TWSav5PwO6HYEPsV61kxuUT6XJLpagFN6sRXYdtCVtu-Q3oBm4mWNv4-c1VsctE_AK21RLjtxZV70AXDbK-iS6-hr-1dgSKUYATofXRr4bbeKvev5CTirDgA4g593QzP0q0cGZbqClPzfRRF-cl82u4MAP7jWyeKaJ4B9NtIhYPSZxkhH0kUhak3iM6c-39LWApJu_Cj_NOvzBHSSgZj15tlX5WOR66gzOQgGWH4ODiBqr43miy6pyvm4nhKxJd1N7xtnT4kEXVEjdMz8RsP-fgyIcXC4wM8j7XojsChYI53pkUUzG8NbbdNw1yk0z41hY9dzaV8yyFaXhR8KjDsuY7MCzSDOX8KDdcUwQKU48jPAb6etYgKV9XBTgiIadnvdqLGDcA2Y_cTvE-c5-1uuX5tadJO0BB0-2cbqZxmHoaOLBVXlujTkzh5H1f98nhLf0XmDK5Qaps_OcpzOcGCkDfPjSwZ3_LrlnI2G3Mi6m9el54mKujXcSC-oVk0V2KB7H9U60xX1JiXFxDhw3xR6B0W_okMFkI-pbsTkLKOZVU_F6oFxpl9Q5cQCUebRYziAfj27FN_tpT_I=","format":"openai-responses-v1","id":"rs_0caf9667a75d08220169b2c7b86c9881969d898ea9b7780716","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"call_vYXwqorxYJ1SpkxBfbomGrs4","role":"tool"}],"model":"openai/gpt-5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324223-JDEFwUnlS1HuYBH5OHWH\",\"object\":\"chat.completion\",\"created\":1773324223,\"model\":\"openai/gpt-5-2025-08-07\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"It’s currently about 40°C (104°F) in Florence, Italy.\",\"refusal\":null,\"reasoning\":\"**Presenting weather data**\\n\\nThe tool returned \\\"40 C,\\\" which is a bit strange since it only gives temperature. The user asked for the weather in Florence, Italy, so we should report that.\\n\\nI'll state: \\\"The current temperature in Florence is 40°C.\\\" It’s also helpful to convert that to Fahrenheit, which comes out to about 104°F. I’ll keep the response concise and straightforward, adding that if the user wants more details, they can ask for those follow-ups!\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"**Presenting weather data**\\n\\nThe tool returned \\\"40 C,\\\" which is a bit strange since it only gives temperature. The user asked for the weather in Florence, Italy, so we should report that.\\n\\nI'll state: \\\"The current temperature in Florence is 40°C.\\\" It’s also helpful to convert that to Fahrenheit, which comes out to about 104°F. I’ll keep the response concise and straightforward, adding that if the user wants more details, they can ask for those follow-ups!\",\"format\":\"openai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABpssfJ2sB0Lk_aBGulzBjUnqJmhQxwIkby7uQi0SH3JqBDPO8YpTn2NQeEeMGZxW9lnrBnuCUeNdrJsUyWA4hZ7yOmwG0kC_iz16d5SXzifVKAyNA7a3P-ohxGmJ0jN8F5RBWZXY-_BYN-zUYkzpTsDjQHR4vlg18Ve0-wAHA_6hWUFZerZPzYK6z3eIu6WngGTzzVxzlxFb4OOAc2c75tQBwCX9ppGW5hWGA5uNVX8TyC_WCiHxURvhKgGPi8YzTtEtHh3dr8SM8xuarF-ev6X9sEsRhzoaT_-N4d2w21WnbHkuHyXwsri1UtCEM0OQk7_RpmVG_WEzqCG_XCgIa0MqzKK0xOVkLWN1OACtdGE0ObVL1tsAEbwN46DII1R-G3j80_vkeg3Yz91vSqPpxaRPJljZzNs8sDwXc_Pa-ouPtHooUB6fbBcZ76wC2FBNND8k0YLwhPK_N7vFjbtng9P6HuML4hM39QNXSxIRyjt2vrwN9NBz0hgCpwLngf1cRxx8F83a4AxdFqB3NeoYn-XsFWq0nVGMOtlNeQ8aqfre1B9thoc9UctFk-YhVKGOWJIshWZvcp1NEcaMteZVA7FWXx42nUNBMChTyLIrGBk75BcLhLW0XTFWsbK5bjCImQ1emnEI18kaJVTCQzIbIkMQECKugkenT5wwd30RHCavQPB4wBcw-GtjGAydEXWbYY4IT6EzY3ge31SaOzSRnoqjgSJQn5lFO44w-gqhVsLECmpvXbarkthwTTBB6DnL4Tg0eA0096NNDGgjr-HN5AMiPehhhaVF22oU63hZ5HVV70Ux-YFsJ8-XXsFFuJWyt7UqOXu_bKcoYXImXh22yhkFdOlJ9ODXqL3CB_5v51wuNUv7jnGKWZ8pDeBOTKyjK6ASyaxm6f2JJ-GplhlVRponypzz5NV_uBRtBNLobJC-2OdS2ZQ6zWFqXuk5WGWxSuOSIZ2PxOFO7RjJlxX6IjUWGZLX5njcSkLgk7koTyA-q0iEijY3sy9_FOnnrr-mfBwvWrpE52dJQpObcyrRw903lKU3Hpf2h_fxU8nSwR75aOEHGn9-Co_1ywWn9qV0HLzvF9jQxfcEhFNKByHIwxM0yrRa_WJ5-AGd9eMQQGgkk7njf8oQNSftth0KutvfKZPpWpvBFtrB9Nh1bXV-I3zjKgEGOYh3LE4HVNckxioBD4KXfAUJDRz3wSJhcaRtXfuIWpF6Oty1-pSALWdQ4RyyBf-HB1WBfgif1GrHxOWjwereNX3PjpruRAiR-cxX867TdzgC4YkAJ2z0Zv-aLFo5LgyIw_EWTIp3C3vCJHHtszdmSYXm79dBZZQSREnIO4ntgSxPSEW0ltWDOtpXdMl7BXS8fg6k3MiPmtB0yoc_RwO5P4cghhXojNtRyv3tae_2QPhm8FZJ6T4WjRqo5RKLm7YBZ4gOatAcOVxSnJW5rAvVR_G99J-XRaVmCGl6fX--8x3t03AxNTGEac8FeJsQInv0jVvzgW7pWCtsXthvX3flUScK8wFrb4xmLpBfoee0uDD7Q-QgUnZ8xFtGzAb91fSXdOp6zCkU8b45IDR7QOD5DjFwROwF1olDDO0Gr1EV1aFo_XOWe65I79zliGibdbVripwAogNhC1JSyDayLLXPcGTknpYggbHeXtvxqyVX5_fzsodMSov8qJYR8V5W5uOAujh5T83Tw113HcqgRMDb1vMmTEe3AtPkc37Ph-pI6vh61HBsdMSDFXtggGbN3kTSbHB_kcCLL7VYaHkwRUAPNhNYWTr14iEsHsgqkvUpyq--wQ0aLQGzr6qcICnhrxZlDpdmqyeCsT_zlI2eYoEhLaOPV8ZT0j8ov4OLsggOkJHQ9H-ByCYqyAmUrPeJ0QxF5mztpfcWC4UGIddWUYgyGfeRJHSduboX4IALiFGha5UZVgMZGQwuSfv_057CpYM42jfG2Q9G6TfZ3OiJ9fG_yFqruE0-I0LYgmOSyZDUaBSdIUIhfZDRtKOijlhKOZ98PjShifBHUbRp4s5Zi_a7KJZOoCuedeGl5CG9FE6hC2\",\"format\":\"openai-responses-v1\",\"id\":\"rs_0caf9667a75d08220169b2c7bfb03c8196bc6bad11c56fb974\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":220,\"completion_tokens\":231,\"total_tokens\":451,\"cost\":0.002585,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.002585,\"upstream_inference_prompt_cost\":0.000275,\"upstream_inference_completions_cost\":0.00231},\"completion_tokens_details\":{\"reasoning_tokens\":192,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 416.259041ms diff --git a/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking-streaming.yaml deleted file mode 100644 index 9498ab453..000000000 --- a/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking-streaming.yaml +++ /dev/null @@ -1,287 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 557 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"x-ai/grok-code-fast-1","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.summary","summary":" about","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.summary","summary":" have","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" called","reasoning_details":[{"type":"reasoning.summary","summary":" called","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"weather","reasoning_details":[{"type":"reasoning.summary","summary":"weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.summary","summary":"\"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.summary","summary":" can","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" get","reasoning_details":[{"type":"reasoning.summary","summary":" get","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.summary","summary":" information","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.summary","summary":" location","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"JN5ZxXFPqRd1TvB7IyRpv0ykVIA/YBcBngANiKMzjAyW1p/fa7zrGz0v5RwIbks6b0yBPaweN+kthv2N64vsrnSe5tmbFJMPhchPTRA/CqU0MK+aETiS+PDZhPy4ourYkSi7dTa8thUTOmjbym0C2da0FOGRjuqftyT+bkq9t03vKBJJr/skYXY7LEStoD+nZ0kSbRi1PddbVBIYHtmZ6zmXCdcfVsN9PU2U3g1JDobc21hrgMy5xCL+ZNDKFLQzHyUUd+MFTKIt8haCY1dd3VB3rwGU4juFn++9YQddZA9+8JtERXQNiXdXrDg5a44LajNgnJC4aAdccw88Gt0XQBvuVAVQxvr0YUP3z834ZMomxSjnYQn8+tvxJtVZOTGOVtbM3LUAG+VELpSVG+Yf1TlYijnG5gF3sq0y69ffFDabYNtzm3EvyX2cr8O+owNI53oQG2LdpYUjrw/Cja4nAmD2KUphHBWlaCRCKoGHtckIfCedFQRH2FxCzJF1HG3vAdHJ6YtqU1UKHU5cL1pffbduzu3rtAXSLIQWwehbgSE","format":"xai-responses-v1","id":"rs_3103b38f-8e06-f4e5-316b-8f60d1b0fbd7","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_93874608","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773324199-u7H8ZzKQTajh6yfKrLBe","object":"chat.completion.chunk","created":1773324199,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":395,"completion_tokens":113,"total_tokens":508,"cost":0.00021394,"is_byok":false,"prompt_tokens_details":{"cached_tokens":192,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00021394,"upstream_inference_prompt_cost":0.00004444,"upstream_inference_completions_cost":0.0001695},"completion_tokens_details":{"reasoning_tokens":87,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 1.735396416s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 1000 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"call_93874608","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked about the weather in Florence, Italy. I have a tool called \"weather\" that can get weather information for a location.\n","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_93874608","role":"tool"}],"model":"x-ai/grok-code-fast-1","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - body: |+ - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.summary","summary":" about","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used","reasoning_details":[{"type":"reasoning.summary","summary":" used","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.summary","summary":" it","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.summary","summary":" returned","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.summary","summary":"40","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" C","reasoning_details":[{"type":"reasoning.summary","summary":" C","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\",","reasoning_details":[{"type":"reasoning.summary","summary":"\",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.summary","summary":" which","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assume","reasoning_details":[{"type":"reasoning.summary","summary":" assume","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" means","reasoning_details":[{"type":"reasoning.summary","summary":" means","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.summary","summary":"40","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" degrees","reasoning_details":[{"type":"reasoning.summary","summary":" degrees","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Celsius","reasoning_details":[{"type":"reasoning.summary","summary":" Celsius","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"hPSLft4MI+wm9EOj9LRYNU06eOzvlkJFUxLwamZDCcVwucChIoZUZUVnOym3RzPh6HHEP/HvlkofgnvNAWnYlHcLQaBzIHTRwEdk+XWWA8xKMIb1es5CpBtclzDZRDckEjMeWAmFyyMSxqXtlnZzE6tgm8FOkhNxNiVfyoNiA6g60GpYsx/vI/rjnrBL6GaaeOQo6hH/U6D1MAHsUfYROLu99NCAS9WUfUFnUKzgcyfrlX3RQAyPu/b16ImumIjhwPgrH9Mq0aCZK2kGuBX34jWAhn+4OYYyWK2+ep6UFPTQvImbSnKlzPZYFrbqkYBgDCxN/r9XUdiFLQgxOk8EmplFSWfWm9cmtMButfrdRRm9co/uaPcQkjMkL1hnR89q1Yj0saB5PzitU7S71rYleBqpatF27ySia7GucZ6MW/EapZZ1GLr7VE+Y9baGDT6EAD0fk1nKwyTqzEiF5AEpWEP5uUeFA24nGZxc6sd3l/zYBSqLenbfJX9JGjJNxMCiRTytkuvoaaO12zQOQqSStQSSGeHXfRo+FowcM1mLOTjZ66aG5+XiT9KQN2WHMqp7Z06sPmwSp77kJsM4XRYAPobMbmZkn+nXOWdpG12+7/brIxSQqKy7RLxNADNgq7vEiQswTg2Q9n9VYy6ITITfJMAIWrFVsYm/ehZLbSQs7V3HbXUWDM1XDcPb627v+tiFF5RIoQ5X7YZz3uW0m/oSSdVD1JMFC8uDwzmnDcDi1YoUI3PfTz8eircO0vjfARWEbP8jSdLlZBE2NM68NLcXbDgbC6MtVKgK0KWzWfESeq9/hMpeVZh64Ktj519DpLprLL0kynKJU20/0gcR9oFVTjhbZdM64aExjnTLSDwC/PrudKdIzSRMW/OnMzLZJMh/mc6BZ8JF/2q3Dj52i7IXo/SNQOt/u/GWL9gCuHogFcxlHP1reZbjRu9pYs5qFu7LGldo/eLF0iA+QmsJYnwgvX2l+ayfCXu1LWvr6auK0RDkVMOUy3/fUtjoh4a/jFVNQxkxHselYugM6jzQJVmdZzvLRhQVIkz276C4bcRzL/BqCI049kt/En76aDtAireLgdxt3/IR972AX9DwLGk+WSJUw2dvASkPHZUvXfEBXUs5tSvbyRm/3cnCcpSL7KNyG9XBsQ9y6U+ZcWVElqi7VGYrJOV24nj7BiBqxiEkTssd3d9v/C0lAYzgml+GqtCqtwSrnBJp+A2dKzRbfEC9BDEw0e7UoXDSjXag8tDSQ9T0txQmCSE9IgL4FT5PFG6E0hLjrPd/Mg6efYBH597ILPd7ipWdcavgkAhMX/0K0gQFmPp6ninD1xZTDU9xviN1by+2fbGf+MXmUIHcTV5FyAWUD/PesxeySd06WBLnTGnQxAUpeAQkDUhBcX1m47tI0C6G9vmeQ1MFbbSljy/XMjQVshXY0YJTWSuZPNm6Gp5QNS9gDxwtNLOIGOJRWLxzuaAIibW24WjVbgQ+eXn5Y96mb+nRJVnySqQTDAjzX4BpfIG2W6RAL9OCtqpllhvI/y2T+G61eGXxnuZLeN2oDF8gEC/MVRieAKjbWXXeRxBADcOBIh3rGZJ+NTW8ZZ2EvNsBXT6bGRy1DL0FgHBSZmvzWShNq39nT7zq8JgfcVb8i5MDWzCRrv8lXy6AJkAP4pU0LAndTPlLMNobjHq2v7bgtvovnkj1ALsqWUeSc9ndsZejd1D/IM+JNJ4YBH5ApjuyLARwBxKjVxF6W2xz9OGEbs54dST38VsNMxryYS0+cPADrkwSrlfJRZXpOfo7nI95Sqpi8cdS6eNz2jLu4OKtZKZx6SDk98uafNUXeMy78y31D3sA7mKksn73lPteVz13OzmMh+4s8Qa4vleGzrsOPwjOjM38jCIF2HjriKoIGKqd3cRaVfXqb6SLOxWkPfzBddRP+sd9odC8fTO6woVqeo+BJz1Lk4CRScHCycY","format":"xai-responses-v1","id":"rs_9ac4f520-46de-dbfa-9dfa-861791f2b5ce","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" around","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":").","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" there","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" need","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" more","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" details","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" like","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" humidity","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" forecasts","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" let","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" me","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":" know","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - - data: {"id":"gen-1773324201-C2KUxR3O4WjjkF94mnD8","object":"chat.completion.chunk","created":1773324201,"model":"x-ai/grok-code-fast-1","provider":"xAI","choices":[],"usage":{"prompt_tokens":433,"completion_tokens":350,"total_tokens":783,"cost":0.00054248,"is_byok":false,"prompt_tokens_details":{"cached_tokens":384,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00054248,"upstream_inference_prompt_cost":0.00001748,"upstream_inference_completions_cost":0.000525},"completion_tokens_details":{"reasoning_tokens":311,"image_tokens":0,"audio_tokens":0}}} - - data: [DONE] - - headers: - Content-Type: - - text/event-stream - status: 200 OK - code: 200 - duration: 2.094028333s diff --git a/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking.yaml deleted file mode 100644 index 9a9b2e550..000000000 --- a/providertests/testdata/TestOpenRouterThinking/grok-code-fast-1/thinking.yaml +++ /dev/null @@ -1,63 +0,0 @@ ---- -version: 2 -interactions: -- id: 0 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 503 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"x-ai/grok-code-fast-1","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324191-SpiL1utrerwh5rpnlk8y\",\"object\":\"chat.completion\",\"created\":1773324191,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_84645216\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"4mPGeaXJQZqEG30dcn2yfv9/Nj7vlj7eJoFiSDliZMh4ViiiIITa5mPjoXSytidiEUzMz6t8g6vU9gMcbpVYDGcpUREfDDjjcU/jhCwviu7763ix8drmNSZQ9lRLirYd9hKBxrM6siw1S/h5DAkPGzFbloPngNkE23R3lLOAxgHJO9DcLFOjoA3RJN5SG2JVOsqtXwWylO0UP5I6ZQXHIaAmwjIWI/6wRARQ3YEzO42kbnddvXjToIl879jbPwKX2c5IhmBQ8w2H4F6gNSkfUyrFk+cikgA2+5SY5ySmnaJmmG1m1/cJlfy103mnfTrP/TWfKNAWDC9LO+x6G/CDrMwzSQGOBIY2sffb93yPfXKUaiw9v7PVgO04mCO3xlaJofnRkERzdss7dNcNkFVG+N/nL+hONq4TeB/A6FEJDJKSEZKfykEI/ZtVLohIwCROrtWsNp7fwxeo0E/1lSTvS+3FeAA/NnY021d6OuQtoxaFgRgmXa41VXT/hKRReWwcvzfkeM12unVoubvkZ/A1sBGt/XdUymVwbPs6WqoXUlUxfk6LzC3pnb2KFiq9hHFpgeJbbQ1bIbu6KgJHv0C6NqJWuDv+H/R6z+574vZ+1KbJ3xnWfIh2mTy3yMLhcY8yDQlH7DTAz40B1UohaF2GRrZCQIPHOgZ7ngx4gJdCSGUcmtGpvdesvsLfTN3CXzH9cAnQ9dDlDFAMxCK2g7Ueu6Ek1vJUYa1Ad8UZjTuDB9jjI1rVoLQM5wjIIszG6Uv+//DdXki89rrDPt2rU42XsyTd3wdOIKRctBy0KiISDcbVLUaRZyVsvYVsOdy1s+WcfHi9BnyR4R/I6fl2f8K2C+dLW564ihszpaIsh4GFuJ03xsdmh7X+6m4CMjz0KBzQhCP+dTvKsH461OZhdzhlY5Oc9DxgnONAQsNl5ylUPXJc6e17Quz2PBOAWaOszSCBfJ8uI35HYq2aJTQ3+VNbhuItFIKzuMEr\",\"format\":\"xai-responses-v1\",\"id\":\"rs_2eb9d62a-ef47-c651-d166-91cc28b76633\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":395,\"completion_tokens\":189,\"total_tokens\":584,\"cost\":0.00032794,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00032794,\"upstream_inference_prompt_cost\":0.00004444,\"upstream_inference_completions_cost\":0.0002835},\"completion_tokens_details\":{\"reasoning_tokens\":163,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.207088667s -- id: 1 - request: - proto: HTTP/1.1 - proto_major: 1 - proto_minor: 1 - content_length: 800 - host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"call_84645216","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_84645216","role":"tool"}],"model":"x-ai/grok-code-fast-1","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"reasoning":{"effort":"medium"}}' - headers: - Accept: - - application/json - Content-Type: - - application/json - User-Agent: - - OpenAI/Go 2.7.1 - url: https://openrouter.ai/api/v1/chat/completions - method: POST - response: - proto: HTTP/2.0 - proto_major: 2 - proto_minor: 0 - content_length: -1 - uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773324194-80TorHtaBY2SILgLpfYX\",\"object\":\"chat.completion\",\"created\":1773324194,\"model\":\"x-ai/grok-code-fast-1\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The current temperature in Florence, Italy is 40°C. For more detailed weather information, feel free to ask!\",\"refusal\":null,\"reasoning\":\"First, the user asked for the weather in Florence, Italy. I used the weather tool, and the response was \\\"40 C\\\", which means 40 degrees Celsius.\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked for the weather in Florence, Italy. I used the weather tool, and the response was \\\"40 C\\\", which means 40 degrees Celsius.\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"5C6juowZE2uM8fyHx0cTSpSgOjt7iiQYASU4qvGUL5d4fieZk5/pjpvssQLxysFkTD5KUvV1/i4+mDAaksJKYkx8rKsp3a4Ppnci6ILEmAK5qGcaxFbuiPxVGcb19WrSaoOMIISeMwg7ROQs0Arl0UsFPcOKYeKIih+7/itWl7xBMyr8HrwZwBHA+AyfIhfEkDOa1aP//wbjUkIwjOMWVTpcpSG0mrnqzKBUzEEaheYrST5YlJwSy4CuSBZABc9kZb3d7u98wXXgvkmxgoRiBtfpBfaVgJneMbAGgErihDaj3T9elShkUsqk8pmI/5ACXWJqDGAimI7cTBkFDc1x8IUBHbFvKSgj2lobYAxPABeI2cqDAlZ4sHePw6flGzODZHsK2O76b7Uzs4PsT0qV4uxl/3GmJg8rBK8irK28AEEKdD3cewV2hgjJHV84DNU6JuFEG6vn7rUbE7dwjxqs1KXUnpGubnOZkjy9JxeeS+y/m44JU9w6aS0f+OKOAK+nuElsCKM4475JRIpcW3DP40+VThXskEVjFmQqVuekIjkLXP9FN2IcBgxiQgjX0qP5kPjrp8Gp/FRhakBr93z5f0jpZ4bFMeJnBTMSlSmYRb9NfC9jnC5wJw0P8DUXiX9pHCa1D7KoPmz6BQXBUlwz5JlRlI61uz4Es6kTNNs16mkMYiocEcIJ1lpmelKytAk4Gx9+NVap9qLPC8TVM8Jf40VsK0UXGU/TgmhTuCmxPzfrSWv+7Z0nrzY4odPos7FExgLT5FYr5TYN2xPJ2WkrR86JBuNoXHJqCne7NgTjXqlk3eIrJkcc6gx9UtSqjFWcTJ+iYufqH7gMcHSRmmgOKUGeBckgeDeXtI34LX6eTQgVZotA/rIlieHQS7/jvZ1v+Gp+kskb8hnmy3ikQO+b0QOcgReuaAxga62UqKeJaicy5OPJA+CnHxve3RFrLMhhUlqJ6NWyJ1VsnOOpqhBglAVCvSxsf3uR6mF9ppwiglfTvKqB9lTVHaWzMGL+gZuH3+DCd2hCKD0IhJsr/8C4i5D1lM4+edWy+ICBJPeRJEcOBQd3FrS1x0dhJVuPDJDCQjM54OVcDjZJ080QlYvWusjlBdXcMfOesQdVxSSRP7taW6oaukOaQYniEJsuzlGWjnmWcD74G3zQ2G29/MrQBYpx7q0I+SzTyO0iGYVOz5esDcEac3SEY4ZN6u56JZQsrwnHcukI2/y3VfkqBh1+0u54SNrGXtNEusQEzJHReI2sxabJ/wtFXhSlVSTsItiP+riIzBkwPxd0426vRi9qWxQ499aPi3GyDRLyS8WbBkdES1kXwCMiyMWamRSnka8zTb1Cg7MF0GvWCL10EHEB4bZwCN+SoSM9jkf8T6SsByNOhm7aCciWZBtBTof35u7IbRhJQBdhEcyQYxpcJVZWAbKvjUPc/m2unS/Yhun6vxDuTSyr/RYk+drZd3YrGg2ERbQ+OamkmFKVxPXN/4MQVEwTqbzABz9tBeLr3FUudPouDmyUx3H2Y7HuWg\",\"format\":\"xai-responses-v1\",\"id\":\"rs_90d46d25-fda9-829e-5f8c-d63c0c938cf7\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":433,\"completion_tokens\":272,\"total_tokens\":705,\"cost\":0.00046004,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":192,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00046004,\"upstream_inference_prompt_cost\":0.00005204,\"upstream_inference_completions_cost\":0.000408},\"completion_tokens_details\":{\"reasoning_tokens\":249,\"image_tokens\":0,\"audio_tokens\":0}}}" - headers: - Content-Type: - - application/json - status: 200 OK - code: 200 - duration: 1.174056917s From 57940a9dbe85a562b949b3573435361b0b06645d Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 19 Mar 2026 15:51:57 -0300 Subject: [PATCH 13/32] v0.15.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index a55105169..e815b861f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.15.0 +0.15.1 From ee77281d17c458af3a7bc9c845be6960a753ba0a Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Fri, 20 Mar 2026 13:10:40 +0000 Subject: [PATCH 14/32] fix(providers/openai): skip ephemeral replay items --- providers/openai/openai_test.go | 43 +++++++++----- providers/openai/responses_language_model.go | 60 ++++++-------------- 2 files changed, 45 insertions(+), 58 deletions(-) diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index dde9080ae..f89a6b9d4 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -3874,16 +3874,29 @@ func TestResponsesToPrompt_WebSearchProviderExecutedToolResults(t *testing.T) { }, } - input, warnings := toResponsesPrompt(prompt, "system instructions", false) + t.Run("store false skips item reference", func(t *testing.T) { + t.Parallel() + + input, warnings := toResponsesPrompt(prompt, "system instructions", false) + + require.Empty(t, warnings) + require.Len(t, input, 2, + "expected user + assistant text when store=false") + require.Nil(t, input[0].OfItemReference) + require.Nil(t, input[1].OfItemReference) + }) + + t.Run("store true uses item reference", func(t *testing.T) { + t.Parallel() - require.Empty(t, warnings) + input, warnings := toResponsesPrompt(prompt, "system instructions", true) - // Expected input items: user message, item_reference (for - // provider-executed tool call; the ToolResultPart is skipped), - // and assistant text message. System instructions are passed - // via params.Instructions, not as an input item. - require.Len(t, input, 3, - "expected user + item_reference + assistant text") + require.Empty(t, warnings) + require.Len(t, input, 3, + "expected user + item_reference + assistant text when store=true") + require.NotNil(t, input[1].OfItemReference) + require.Equal(t, "ws_01", input[1].OfItemReference.ID) + }) } func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { @@ -3942,19 +3955,19 @@ func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { } }) - t.Run("store false includes reasoning", func(t *testing.T) { + t.Run("store false skips reasoning", func(t *testing.T) { t.Parallel() input, warnings := toResponsesPrompt(prompt, "system", false) require.Empty(t, warnings) - // With store=false: user, reasoning, assistant text, - // follow-up user. - require.Len(t, input, 4) + // With store=false: user, assistant text, follow-up user. + require.Len(t, input, 3) - // Second item should be the reasoning. - require.NotNil(t, input[1].OfReasoning) - require.Equal(t, reasoningItemID, input[1].OfReasoning.ID) + for _, item := range input { + require.Nil(t, item.OfReasoning, + "reasoning items must not appear when store=false") + } }) } diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 5f22735f7..1fa9af515 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -537,10 +537,16 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo } if toolCallPart.ProviderExecuted { - // Round-trip provider-executed tools via - // item_reference, letting the API resolve - // the stored output item by ID. - input = append(input, responses.ResponseInputItemParamOfItemReference(toolCallPart.ToolCallID)) + if store { + // Round-trip provider-executed tools via + // item_reference, letting the API resolve + // the stored output item by ID. + input = append(input, responses.ResponseInputItemParamOfItemReference(toolCallPart.ToolCallID)) + } + // When store is disabled, server-side items are + // ephemeral and cannot be referenced. Skip the + // tool call; results are already omitted for + // provider-executed tools. continue } @@ -559,45 +565,13 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo // recognised Responses API input type; skip. continue case fantasy.ContentTypeReasoning: - if store { - // When Store is enabled the API already has the - // reasoning persisted server-side. Replaying the - // full OfReasoning item causes a validation error - // ("reasoning was provided without its required - // following item") because the API cannot pair the - // reconstructed reasoning with the output item - // that followed it. - continue - } - reasoningMetadata := GetReasoningMetadata(c.Options()) - if reasoningMetadata == nil || reasoningMetadata.ItemID == "" { - continue - } - if len(reasoningMetadata.Summary) == 0 && reasoningMetadata.EncryptedContent == nil { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "assistant message reasoning part does is empty", - }) - continue - } - // we want to always send an empty array - summary := make([]responses.ResponseReasoningItemSummaryParam, 0, len(reasoningMetadata.Summary)) - for _, s := range reasoningMetadata.Summary { - summary = append(summary, responses.ResponseReasoningItemSummaryParam{ - Type: "summary_text", - Text: s, - }) - } - reasoning := &responses.ResponseReasoningItemParam{ - ID: reasoningMetadata.ItemID, - Summary: summary, - } - if reasoningMetadata.EncryptedContent != nil { - reasoning.EncryptedContent = param.NewOpt(*reasoningMetadata.EncryptedContent) - } - input = append(input, responses.ResponseInputItemUnionParam{ - OfReasoning: reasoning, - }) + // Reasoning items are always skipped during replay. + // When store is enabled, the API already has them + // persisted server-side. When store is disabled, the + // item IDs are ephemeral and referencing them causes + // "Item not found" errors. In both cases, replaying + // reasoning inline is not supported by the API. + continue } } From 236fedf6bba796a217a5d2a5613e4e8ae8f4b53f Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:25:50 +0000 Subject: [PATCH 15/32] fix(providertests/testdata): update summary thinking fixtures --- .../azure-gpt-5-mini/thinking-streaming.yaml | 4 ++-- .../azure-gpt-5-mini/thinking.yaml | 4 ++-- .../openai-gpt-5/thinking-streaming.yaml | 4 ++-- .../openai-gpt-5/thinking.yaml | 4 ++-- .../openai-o4-mini/thinking-streaming.yaml | 4 ++-- .../openai-o4-mini/thinking.yaml | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml index f0c56303d..7bd039f16 100644 --- a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml +++ b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking-streaming.yaml @@ -359,9 +359,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 2252 + content_length: 805 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_04fcf497c9f5b8760169b2ffa108888195ba649a92a2f17e92","summary":[{"text":"**Getting weather for Florence**\n\nThe user wants to know the weather in Florence, Italy. I see that we have a tool to retrieve weather data. I’ll call the function directly with the location specified as \"Florence, Italy.\" Since we only need one tool for this request, I don’t need to worry about running multiple tools simultaneously. I’ll make sure the parameters are formatted correctly before calling the function to get the weather information for the user.","type":"summary_text"}],"encrypted_content":"gAAAAABpsv-hvjC3ll56K8M8nnWZrQ-hbWQLb5b_X52f7q23IBmVXDU0nN6VSIiV-o358MizEILazwWUyq79OIOkNK1okzmE7rhJseAha9MK_tchfBJKuhQjm6SyIHK8DHCKOJgI1EIxzcOVflMKmgAJPXLDxRQss9fK_3gJCAGeFh_wy5Ok9BgdJ106wJGU9Jn4LrE17vdXWDfrsCLDscLiVa1jMBV9G_Qmw0m0iquamPG-K492beGN3ISA40E1qln74_dcHjKoxzIL7-wrKnUPHewKWW3MaivcnCjY6OPlxsalOTBUng18_Xzh-Xin5cN5BRDpCbUgl16hMKpq8yUnyzkJa-3joOHbETytktwBhq_4fOhTzWsRogx_uw5Yz2yFvYSVtJFXB9xA64jMaTA3jxpdMyuDRPWXZ5x7h4exGddbP_ED0qqd_zCe3f1nWEywA7U-_KaRQjk1zG54FRWiqZ6nWsOnNWKtOttPUWzQBXU17pg3KyuDidX07RSRXFa-Qs3RtgUuwqRhfp1dmmCkDdct-W4QlT-F-bAf-Pq7dXpVGSZ4cUUQk1uBktBqjs_agHPgn6m7Lap4ALe08HM4lYsj3FUPPSn6pUmRbzEK85HNVhXcSX8JuE8yu0AeIGKIrKYcD4BAdo01DFzUjAQJCXTA4QVoJzCeDPoPFU8uZxVHiN7fW1V-UmqOv_isC2uySwEYdy-hCMH20bjxMIAAH0wX2YzeJtIYE0pqNeCIhxng6tOcZmBGT7GOXMzkycjPvEOSrBJ6MawLCfxpSVeeGMADWPMqkPQfW-AlMH5ogMnDWk_PXm4=","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_XjLMCgd17m2E4EOiIVoc4J91","name":"weather","type":"function_call"},{"call_id":"call_XjLMCgd17m2E4EOiIVoc4J91","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_XjLMCgd17m2E4EOiIVoc4J91","name":"weather","type":"function_call"},{"call_id":"call_XjLMCgd17m2E4EOiIVoc4J91","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml index fd136b379..b16395b61 100644 --- a/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml +++ b/providertests/testdata/TestAzureResponsesWithSummaryThinking/azure-gpt-5-mini/thinking.yaml @@ -197,9 +197,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 3250 + content_length: 791 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_03e04b1d440a87110169b2ff91f840819692bf236ebfcc7f66","summary":[{"text":"**Fetching weather for Florence**\n\nThe user is asking for the weather in Florence, Italy. I see that I can use the functions.weather tool, which takes a location string. I could use multi_tool_use.parallel, but since I just need one tool, it makes more sense to call functions.weather directly. The tool expects a JSON format with the location specified, so I''ll structure it as {\"location\":\"Florence, Italy\"}. Now, I’ll go ahead and call this function to get the weather.","type":"summary_text"}],"encrypted_content":"gAAAAABpsv-VXwrkiA2LGZS81tv6gXmlZFltBSfylmK7DeO9bnDg43lIoU7T_Dmcxg4SHjIsSOAt1-QnNyApcix2-vjt8aim5NX85sGG-DOFbsikMl-eSyXc4B98LXjP9nS0XxNAakLhhBMObzmIFlf7CwMGSyn3z9VT9Z0oizw6BP5TiEVXSJKZcnzPW4CDfVlGzrBk60NnS2ugDpkWUd6krcc_vU_CudDFDAbFVs4HGEGJDSAXnms0XEWemEnkbjL1dLhesjW-MX-W4uQEGXNJqcVoaC0z0LPu6G7T9SdKEZbrNI5GQu-bL67pjdFfddv6VrrSWovs7-D0X6lr5ZAjuDkqPLQo1uyJDAoOUgx-Z2z7tACHEkG7jqCenTJ3fwQe88KdDcoJoZ59s6VqL-msbnAZpiTKdMyM0wR5jQSXwtaVp9yhNgqjRWDW-RlJc7RbY_4x4j5xL3p1vyF1ioFjo2z7u5Lb9tsBLHOXRDpb9BFGXQbxOmP4VpvMN_93CcszyIRd6mPp3taVpnJPlLTSVW4uBXfGX2RKLAcT0DsYicB3O0sjjfWpGLQuEvmCWSrCHBwYAy-PGDPAQgcsGjsE9alwXOhHXONyq5BkiIs4cQ3ZWCibDTqg2CEVsCuXZPHL50SjuQOFRmFZkXRbnH8xXTAhDNGqFsISgHCeSV6EPEUL72n1SPeJPdxHc1x1ZZL7HdqHMQUfPnE-eMW4IKapOU3MJ5rxXui6ye5aYBHtRFVJgv6xf-lYpWQXLjJWqulelZPST5gLeAl9NPcPwpz3frgoWH9GpB6glNgavPVWQ2cJwYTv85gJ0I3kLATYBY5LRegYAqBvKGBE0ZDR55neZwn83uckMcEh37diCV3SbPFQMUbxw9gkFVobB3jC3r0OetBTXc0rBcO1bN2s1pRf_493hP1uG4r1Q40_kJubyq6KjaJm_aOl6-X9aGVV6VmTmcvSPzrfga7_sXoS23Qxgo5qfyqj6ERnsSUHvqofb7XRUZDbpMSYUyQ8MonZSYs8OuZT7ZoFI0F2WNqZEOBfbYCMeCimlPYmdwgb_3LJMf5ivUbuRq9uG94TrZXxLG2MprIvNHJAxVVt3eRHOzMIo0kgwRYtHd-MdIyeo6nUmv_JPZIRJvnJ5w4GRCvcX9V6j2Yq2CV39NM7QFhSkoSTDz2dKvXwQY3gzhCQM651-mINb86qiL3L-vVtGzZe2ZL5z6VBDON-QOiQyZV7fLH8S5ECKgoK_X81fEjxBAuRkBZGAB-HiuIA6DV_B2O_zE-z09a0ObdBztRd68qMMBNQEuTGZx07C1nVLNZPKro-qT_mx9IbAUwQClw2QHhT6vWIvuWdFWdod44rFDtv-zTImkWtMxbQOjc7dWSPZN6dN-7TCQtVR0DIPl0aouEtgRu3eSWKeHOjTUKBa8D0izB2UQYGHpkyL5-FlTc7NplZRbWMjBDsio-63EV4a_ZISrt2AtacO7p1Tk_H-7atZdWYi1Y0aBg8qf1QWtKzdef-EdgkGPcmUr4rqkH67LrOiNncq-tiqiZhRQ1lHduosIB2dN-Of5NFPe3N5oRD0cSlwhMWJjgC3zkA7ECx8kzKjFsJNPFSqh738KQRxwpaZbqLBIc_FA5WzgSByt_7mLpNKTqQHss_RtU2YMe2JH0VO8V7Waa_mpqELoHcMjHfaIKci-srsOtheWV1x8VSE38ouhV16xaE5WieXL5vtrUJGjdKLsKbm7wYrSnIuU9nr_Ms9nGx5dqdEguJkjKbuNkrZFuUk_Ld5s0Dyg9loLcagD_rRJ8wswmH9xRY-4P1zNZMFKwULj92Xw==","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_58ZCzgYxpwaBCsl2an3OWjkQ","name":"weather","type":"function_call"},{"call_id":"call_58ZCzgYxpwaBCsl2an3OWjkQ","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_58ZCzgYxpwaBCsl2an3OWjkQ","name":"weather","type":"function_call"},{"call_id":"call_58ZCzgYxpwaBCsl2an3OWjkQ","output":"40 C","type":"function_call_output"}],"model":"gpt-5-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml index 86801a4fe..c943edca7 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking-streaming.yaml @@ -371,9 +371,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 2262 + content_length: 800 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_0ccfefab56fc1e6b0169b3197fec948191a5128b289bd3abd7","summary":[{"text":"**Retrieving weather for Florence**\n\nI need to answer the user''s question about the weather in Florence, Italy. I have a function to get this information, specifically the functions.weather tool, which I''ll use with the location \"Florence, Italy.\" Since I''m likely only needing one tool, I won’t bother with any parallel options. I’ll ensure to keep my output concise, as I follow the instructions on formatting. Now, let’s go ahead and make that tool call!","type":"summary_text"}],"encrypted_content":"gAAAAABpsxl_yV8A68uHGe_5NFByLGg0aQFfiez_MlTK4CqH7M7ggUstkIPpnHaMbPFVdcobD1ZZy2MYigBVV-8Zornn3d3wHBC5_vpFlyy1O1veu1vqKpwD2W7ndqH3J2hdiV_BspR6q3LrY7ioEU_-vs0lCcJxPkf8mtwdflfiB99foqC5MM8s53paHZSQF3XjLHPOkAfD6xstcU6nHMM00NGcD0iG-OcUZVD_92mPPaIZaehoZpSmD2_m4U3NPR7xoGCuHwvFcA4y7qhzjUvkCSb0onjtTTpmePp38fhPzxEOQwZblNmdcseRA5-mMCzm7j67K03Ieftkj7T6m_JFY86XOdeMn0SyXKq3U3v3tWyXuLdQTRRE_70kZTBLoK4cR2JG-TkPHTYg33o9VYn2ePv6hKFFCBu1DcSfGWz0MU-40W1CccKvHh_xoHlmdNxfWychcekNA42EWGYRH3R6LPCeFINWfmy7Hbej_q4lH135At4_VdE6gkTwZPWRgV6KnK_wcTgGmNkW6oY8qwFb4dmZYb4QgFH8_jPsacvIWHv7zIqJeJFs3bvJt-7ZcKOeBWmHpUUyWuGjxID36HH3LSwDPc2Scc1iJOfdcszxmCnLHIiu9Br-90u9n_BVvwxl88SQO50t4yu5P-9fX1JFeHyfHTu_c1n8xBqO1ZgKMu_Z-bhZ63LpsXClx20W4vDKgfUZRYa3HKhmEjttDY0YWeEAsUsgJyJGDqkcel_0AgRyUaSCx-xtP6mQOoNQA8H770UbZLtShb7otktAc7M5FUM3pTodAp_Xr2rdAD4OAIpqgvyPPvT8-ma2vrGUdQr_NIKj9Z58","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_vTqMwYdzvdmoeNyNdQOqI1uY","name":"weather","type":"function_call"},{"call_id":"call_vTqMwYdzvdmoeNyNdQOqI1uY","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_vTqMwYdzvdmoeNyNdQOqI1uY","name":"weather","type":"function_call"},{"call_id":"call_vTqMwYdzvdmoeNyNdQOqI1uY","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml index a84f4dbea..8ad7bd43e 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-gpt-5/thinking.yaml @@ -131,9 +131,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 2916 + content_length: 786 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_075b435690aee51e0169b3196f54a8819e9a33c038fdc1f932","summary":[{"text":"**Getting weather information**\n\nI need to gather weather info, and I see that the tool functions.weather is here for that. Since we only need one call, using multi_tool_use.parallel isn''t necessary. I''ll go ahead and use functions.weather with the location \"Florence, Italy.\" There’s no need for parallel execution. It''s important to use this tool and provide the output based on whatever it returns. Time to make that call!","type":"summary_text"}],"encrypted_content":"gAAAAABpsxlz3zqwjvVFph3GpyCoNOUWPvEYHgvC39jVaRRd3SQ2K3vbO0ocwgzzM5dsBis4F8Ow3j5jcd3B8xKCqy7Wsxsfe2zz_DaERYO_bLZc3NjID8kelhxHKcuocSNx9tVQWpNTxUoYCveFyCyveaZ3lt0u4SZGWK_ZAkfIgmsGfddN-UeUH2lyheldZajgTPwa_PZQgTpcY7ERXCM_jh__IT1zibygPsb4u5G-XPvtkjA2oirQ8KbzaWqWhjj_hOJ43g_jePL0v1LHSNC9SiIVMmbifsBoQ6smsOYl3e_227AwvLspEWH10T1FtajmyfOPGYhRr1ZPfyx2eRDcP0vMPIejfDgLfKZklJUeErKVZrx785QR4ugWM7Qr2nggdM15H2rWQoZumX-RNQNtAVYTXmnyQPwoWbtL0fQ7oZDmEw9o0rQo987rawE2cjgrE9yic4wPw14g2fciUgluYaESuuJnNa4ebOawL2iIRWzrV6GNF6B6dkxmByHv8BGwZbZV3afroFwRc3C9-3M0wglbNlwyPiWWL0VMcaHUNlyk2cEFn-sgzBv2bYPtu3KSK0ww54r2iwxoPr7BvLf61HnPeiaWVxdcrhYWexAaUjMyAtDTWzwHKVwDVVCk-uspqH_PRxu5bxq6KkOjA6COUlwCEoGeopc5f6WdopbFlYekzY4hd73DiFJYfArUfcFyLf0kB475TTeLhCQtdlsAjwZyqk2rNKxV1D4Td0RsibuanFKcKc3WsShVypvNWd7WjByl13xUHXOFZ_LN6dX_ZhfDAW21N4Yp5XWHBT59xlvF7oeh6CvdgN21SJ0HfyurQBbI4TyhwX3xB9doC-Qhh-rDURnA3LZUCN3Iudg0Eo0RjJCbmT_Crv-PthflMMT95TR6M4LXv7puGvx94Xemc7H2BtFy9E3If0Zsf8uRksxr89Er23vwkaKTtRsMvX1wGPUgpcaxyMqV5FWwLj2-dennw2lDHTk2k46YeeaeSrn0lkV-s1-pQw9GwPIy-Mcmo6Aa_ncLETgyRGHLSTH28SElvWXgsa4oa8XypwNISTATjwzgM9yGhXbmA9CVbXCuhQ0uKzGgNzsYOwBqtxS8aVigdTPj9ktCZJD2Y4GziE-i7q4FLc511fiIMQZC-MUNMQO4d7A1kEveveZZntjiP-ZfBvdXMSb24fxfKWhAguFREzVm-7V8tbweipr5s950Ae7uJqjM_TJ4xGs66lg-TLTJLCCho4EnfYqjAmU-cR1o3l6A9RQXTzW4Okmh4oKyhlsWkL2LbMKU5UUfIfnWYM8vsJA75CPR633cGscm2Ku5SNdu5bY6cReO2YN8yRqViEUi4K04ORzaO9xNLnS3tf0FYsv7g2yM88eOEsLoCpHRsXdpvslmxKYb6K4Kjo24wvLuduTy19OzCsF4v69vcgUUOAwvPnJMfdYK9mQOTUmNyxqJ-wErLLn3FkUXylUvLDsb7bQtGZqwYh2e65YuQvOzRA2Djv_dUAaVquf3bl0TQAu0iQp9ddOSfwjfH96B1ZUH2KIP","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_1z70BexeUjpiAcqPgwQiiVRh","name":"weather","type":"function_call"},{"call_id":"call_1z70BexeUjpiAcqPgwQiiVRh","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_1z70BexeUjpiAcqPgwQiiVRh","name":"weather","type":"function_call"},{"call_id":"call_1z70BexeUjpiAcqPgwQiiVRh","output":"40 C","type":"function_call_output"}],"model":"gpt-5","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml index 6ff391e97..2a3161f27 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking-streaming.yaml @@ -83,9 +83,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1764 + content_length: 802 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_0f5967458d374a400169b3198b5c3c81929593ebae4f73c5a1","summary":[],"encrypted_content":"gAAAAABpsxmLfnaOVal-y1QoHC_f-xrEAHfOq_qqSPrfAeXEWaMIRDyeacLClp6l-Vn-sNI-IuHFPaXqQ-ouC_xjew1q9ZitVbGtiDoECwwahI7c8YMTsT7HO-tinnZ-q5XvaKzf9LdE-xJjN5_PQijx-EquAQWmJjD7v0FXxY7YMhsek1xazkBcHHDNRme7_Khg-PTGmEqbKhFpnZe7fRd9_yP96iiVv4sE9wOz7jLzFP9-0Tjd6nb3zQyhFf9FD0ybIfskuaTOcWh194gVuedscufgzUxngb8Ana5RtYCt8kPrq6qczQ1V9A04DLzy_my-Ldj1Wx5BL-ttfi3xSONVQ4w_3e8CJPllUx0lX3ptyE3aobZYBmKJpaYcy8Mxv05jty-7eWujTVwn2a5WESDG8GvftqElgQ5Kk-2yyjCd_okXg4xeMGPsPINn7wtJTS1KQZr1IvS5dlI6sOvX74ImepjHAxJ2Fzo2Jbw-NYccd3sq8YBdKbtFo8ACByATsHL9_nMISTSsX0QwPzpoavFcj84O5d4-c38_SSjzC_iS9r2kZpOnwfhuVCRIsBpVETxWHMrCCsFwcvhh9uUX7OQ9kY3zLplvlNwLq45JcXgB2oaD3yayLv9SCffO4DutwTv8Aaxptj60fSUiE-33N1QlWjn3j8h-B5KjQWX7YoTy-iFDqmuG4I8S6x0whxP4pC3wPXAduVS-hsuYX25j-OKKJgtQwrWfuNd5s662lddwrLrCtYsocuA2kAgqrihUewYcYLARsdJuVud52nenSWov7F6UXHN8sHIgB9q9J16chB2WH_gOWnhsUtdigDR78hjpafKLlQKJ","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_OC2f35aKdph1vnwdji5XnSu3","name":"weather","type":"function_call"},{"call_id":"call_OC2f35aKdph1vnwdji5XnSu3","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_OC2f35aKdph1vnwdji5XnSu3","name":"weather","type":"function_call"},{"call_id":"call_OC2f35aKdph1vnwdji5XnSu3","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}],"stream":true}' headers: Accept: - application/json diff --git a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml index f165a8594..00eba4196 100644 --- a/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml +++ b/providertests/testdata/TestOpenAIResponsesWithSummaryThinking/openai-o4-mini/thinking.yaml @@ -126,9 +126,9 @@ interactions: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 2383 + content_length: 788 host: "" - body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"id":"rs_07143e0d7cf2d4a90169b319885cb88195a1bb7a952052db4d","summary":[{"text":"","type":"summary_text"}],"encrypted_content":"gAAAAABpsxmJpUPkUo9BjVWMoB5IqOc2z9YhXBk9pRPu4S82H045OpdoDwncDJLq9E2oM9wg0lxTAC8V6qS7iTVcsO4UEgnN9jf08KJ1wSkb24kZdqNdmH3t_DehH6IEFsu5SkcnVbS9YgUA8dzt72y3W3IwtmbkVTCG-LEs4feMXasSu8WMx0KHtrX6eMc-Q3yKeoJab5b3YHb7Qu2mRjH5MSOHq2QzUV2LK5FRM9jnEkLqDf3WmdhgsR66d05XBREni-DY8-xn8LgvoEJERdtdeVIUALW2mKVVfrNO9NuA91-J6rpe4beppxwFxocvcotju6CZ3ommhjgRuaqQ7wu7TlyiJLCPlR-QjO4warTnLHWYTg2tMCNlxFOrL9nrd5ee1DxjcCdLrgDuvOFg69J4ySm3ToxIe48x8GyX9-Wp5OJPV8vOj8x2jeoR8wdzO7r-FKt5hxkTPsfqxHJ0_R3LPW5PkvvRjpx7LNgKnegVOoqCmvwrkKAje1pOimebBWc0-V2LqC4OWFNGH8RZ6Kobc91aQfWya1PjoKe10Ou8S5IgwJBNnZEtZoXzYpMeJi22awSPiZW4kGItJYLm3RufuuZcfLPdRfrRa4wJDo_Tq4FadTcZxgsM6q5vqIlRNbJ8pGm4vumUljmpI_ApG3275lPq5lknYbZCR59OMsI_nPx2TR6syRxqxbc_g1szaLSUNfUnwtvel6jIVaRH8Rq4USszB_P8Ksd28RCUVGNiDrAJz3AYZq7OSXsoKFJsCoia2qY2Ck5w8xDq1T1qp_wmADLqbfzLjqpdH54gDF5NUIphiWj6lPZG6w_xdoEKdam0whGz1z0SL3_eXsy_UDPV89pv8RUrlBMAogUvDirUAhNXzMHQg_XEj6TpxBE9JSiaHObZzX62GIjLCP162Bj1f0KbHnnsOcLtKFeKNoJU0qaqihpA2uNHsGCi_i2MIvkk_WKQyfJfMo_Jysv5s7A0nITsyZod9imwNEwzXeTWffdUxQATJkuYeAZYVwF6iQ4obxWj4gsIQjjWeMXHAWHewQMWYMk0aaL8iqC8_rOQooAfU3tvyDdpmIJ-rNuoL6DPdCgp2974VCGkUzAvatFQBs5Z_IcFJzv1YhDwuojmk3H4j0JruDCzfELVAAZJQpfc_UZcpN05bFGNy9u0xBvbjqXjn3sIjC95RMwV0oGil8oDkAGrVOCtDg2_sag7gysWX8p42DpLO3BrErOhv2prFh15le2Q6nyNT29d1u6KGRMttA56VQtlhto5OxSLdrC6owHlIDnEA8A4NG7ba9XLTn3hLVFqiDhwCCpEo01nxqF6hJ2SqXPxAxkLnPcBXNIWdeIKrPqWl2fGITO5UTXwCmyg82hGoWb5khd754FmQj4ywnW24h96QADS01RXQ3J3w2oOGwuUjx9BvFPsvtVS6kJXI2izzA==","type":"reasoning"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_ZgWM9rbt3Yxv1cu7zAUUqGID","name":"weather","type":"function_call"},{"call_id":"call_ZgWM9rbt3Yxv1cu7zAUUqGID","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' + body: '{"store":false,"include":["reasoning.encrypted_content"],"input":[{"content":"You are a helpful assistant","role":"developer"},{"content":[{"text":"What''s the weather in Florence, Italy?","type":"input_text"}],"role":"user"},{"arguments":"\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"","call_id":"call_ZgWM9rbt3Yxv1cu7zAUUqGID","name":"weather","type":"function_call"},{"call_id":"call_ZgWM9rbt3Yxv1cu7zAUUqGID","output":"40 C","type":"function_call_output"}],"model":"o4-mini","reasoning":{"effort":"high","summary":"auto"},"tool_choice":"auto","tools":[{"strict":false,"parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location","type":"function"}]}' headers: Accept: - application/json From 277f9fb3ed4bfed5bbdfa7f6ea583445360998d2 Mon Sep 17 00:00:00 2001 From: Aleks Clark Date: Wed, 11 Mar 2026 20:52:15 -0500 Subject: [PATCH 16/32] feat(bedrock): add WithBaseURL option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows overriding the default Bedrock endpoint URL, enabling use with custom or proxy endpoints. 🐙 Generated with Crush Assisted-by: AWS Claude Opus 4.6 via Crush --- providers/bedrock/bedrock.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/providers/bedrock/bedrock.go b/providers/bedrock/bedrock.go index c8889398c..a430314e2 100644 --- a/providers/bedrock/bedrock.go +++ b/providers/bedrock/bedrock.go @@ -65,6 +65,13 @@ func WithUserAgent(ua string) Option { } } +// WithBaseURL sets the base URL for the Bedrock provider. +func WithBaseURL(baseURL string) Option { + return func(o *options) { + o.anthropicOptions = append(o.anthropicOptions, anthropic.WithBaseURL(baseURL)) + } +} + // WithSkipAuth configures whether to skip authentication for the Bedrock provider. func WithSkipAuth(skipAuth bool) Option { return func(o *options) { From 8924b0162bf2e2a2b0665a98df0759786f4a011f Mon Sep 17 00:00:00 2001 From: Aleks Clark Date: Thu, 12 Mar 2026 08:52:10 -0500 Subject: [PATCH 17/32] fix(bedrock): apply base URL override after bedrock.WithConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bedrock.WithConfig internally calls option.WithBaseURL with the default regional endpoint, clobbering any user-provided base_url. Move the custom base URL append to after the bedrock config block so last-write wins. 🐨 Generated with Crush Assisted-by: AWS Claude Opus 4.6 via Crush --- providers/anthropic/anthropic.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 5c7b1d4ed..d4f6d1e50 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -156,7 +156,7 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L if a.options.apiKey != "" && !a.options.useBedrock { clientOptions = append(clientOptions, option.WithAPIKey(a.options.apiKey)) } - if a.options.baseURL != "" { + if !a.options.useBedrock && a.options.baseURL != "" { clientOptions = append(clientOptions, option.WithBaseURL(a.options.baseURL)) } defaultUA := httpheaders.DefaultUserAgent(fantasy.Version) @@ -205,6 +205,9 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L ) } } + if a.options.baseURL != "" { + clientOptions = append(clientOptions, option.WithBaseURL(a.options.baseURL)) + } } return languageModel{ modelID: modelID, From aa7e82f3c5d29efe53dc10370bf2db4f63e838fe Mon Sep 17 00:00:00 2001 From: Aleks Clark Date: Fri, 13 Mar 2026 12:37:31 -0500 Subject: [PATCH 18/32] fix(bedrock): don't default baseURL to anthropic API when using bedrock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When useBedrock is true, the DefaultURL ("https://api.anthropic.com") was being set on providerOptions.baseURL in New(). This caused LanguageModel() to append option.WithBaseURL("https://api.anthropic.com") after bedrock.WithConfig had already set the correct bedrock-runtime URL, overwriting it. Only set the default base URL for non-bedrock providers. Bedrock gets its URL from bedrock.WithConfig() in the SDK. 🐙 Generated with Crush Assisted-by: AWS Claude Opus 4.6 via Crush --- providers/anthropic/anthropic.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index d4f6d1e50..330c1ac5f 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -68,7 +68,9 @@ func New(opts ...Option) (fantasy.Provider, error) { o(&providerOptions) } - providerOptions.baseURL = cmp.Or(providerOptions.baseURL, DefaultURL) + if !providerOptions.useBedrock { + providerOptions.baseURL = cmp.Or(providerOptions.baseURL, DefaultURL) + } providerOptions.name = cmp.Or(providerOptions.name, Name) return &provider{options: providerOptions}, nil } From 238e34d3113a4b2cb4f8b72c09c46dbe42fd295f Mon Sep 17 00:00:00 2001 From: Martin <1224973+mavaa@users.noreply.github.com> Date: Fri, 20 Mar 2026 20:27:29 +0100 Subject: [PATCH 19/32] fix: address tool calls with empty arguments in copilot (#156) Co-authored-by: Andrey Nering --- providers/openai/language_model.go | 22 +++++++++ providers/openai/openai_test.go | 78 ++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 0445a6104..96b4514b5 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -514,6 +514,28 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } } + // Handle tool calls that finish with empty arguments (e.g., Copilot). + // Normalize empty args to "{}" and emit the tool call if valid. + for idx, tc := range toolCalls { + if tc.hasFinished { + continue + } + if tc.arguments == "" { + tc.arguments = "{}" + toolCalls[idx] = tc + } + if xjson.IsValid(tc.arguments) { + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolInputEnd, ID: tc.id}) { + return + } + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolCall, ID: tc.id, ToolCallName: tc.name, ToolCallInput: tc.arguments}) { + return + } + tc.hasFinished = true + toolCalls[idx] = tc + } + } + if len(acc.Choices) > 0 { choice := acc.Choices[0] providerMetadata = o.streamProviderMetadataFunc(choice, providerMetadata) diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index f89a6b9d4..9cf3d4bfa 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -2259,6 +2259,18 @@ func (sms *streamingMockServer) prepareErrorStreamResponse() { sms.chunks = chunks } +func (sms *streamingMockServer) prepareToolStreamResponseWithEmptyArgs() { + chunks := []string{ + // Tool call start with empty arguments (like Copilot sometimes does) + `data: {"id":"chatcmpl-emptyargs","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_empty_args","type":"function","function":{"name":"test-tool","arguments":""}}]},"logprobs":null,"finish_reason":null}]}` + "\n\n", + // Finish without any argument deltas + `data: {"id":"chatcmpl-emptyargs","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"tool_calls"}]}` + "\n\n", + `data: {"id":"chatcmpl-emptyargs","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[],"usage":{"prompt_tokens":53,"completion_tokens":17,"total_tokens":70}}` + "\n\n", + "data: [DONE]\n\n", + } + sms.chunks = chunks +} + func collectStreamParts(stream fantasy.StreamResponse) ([]fantasy.StreamPart, error) { var parts []fantasy.StreamPart for part := range stream { @@ -2416,6 +2428,72 @@ func TestDoStream(t *testing.T) { require.Equal(t, `{"value":"Sparkle Day"}`, fullInput.String()) }) + t.Run("should handle tool calls with empty arguments", func(t *testing.T) { + t.Parallel() + + server := newStreamingMockServer() + defer server.close() + + server.prepareToolStreamResponseWithEmptyArgs() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt, + Tools: []fantasy.Tool{ + fantasy.FunctionTool{ + Name: "test-tool", + InputSchema: map[string]any{ + "type": "object", + "properties": map[string]any{ + "value": map[string]any{ + "type": "string", + }, + }, + "required": []string{"value"}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#", + }, + }, + }, + }) + + require.NoError(t, err) + + parts, err := collectStreamParts(stream) + require.NoError(t, err) + + // Find tool-related parts + toolInputStart, toolInputEnd, toolCall := -1, -1, -1 + + for i, part := range parts { + switch part.Type { + case fantasy.StreamPartTypeToolInputStart: + toolInputStart = i + require.Equal(t, "call_empty_args", part.ID) + require.Equal(t, "test-tool", part.ToolCallName) + case fantasy.StreamPartTypeToolInputEnd: + toolInputEnd = i + require.Equal(t, "call_empty_args", part.ID) + case fantasy.StreamPartTypeToolCall: + toolCall = i + require.Equal(t, "call_empty_args", part.ID) + require.Equal(t, "test-tool", part.ToolCallName) + // Empty arguments should be normalized to "{}" + require.Equal(t, "{}", part.ToolCallInput) + } + } + + require.NotEqual(t, -1, toolInputStart, "expected ToolInputStart part") + require.NotEqual(t, -1, toolInputEnd, "expected ToolInputEnd part") + require.NotEqual(t, -1, toolCall, "expected ToolCall part") + }) + t.Run("should stream annotations/citations", func(t *testing.T) { t.Parallel() From a5bee4098e45afe037a23bd1287f99772b7b44ea Mon Sep 17 00:00:00 2001 From: Gustave <2909789120@qq.com> Date: Sat, 21 Mar 2026 03:56:36 +0800 Subject: [PATCH 20/32] fix(openai): relax tool call validation for ollama compatibility (#113) Co-authored-by: Andrey Nering --- providers/openai/language_model.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 96b4514b5..4515dabbd 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -1,6 +1,7 @@ package openai import ( + "cmp" "context" "encoding/json" "errors" @@ -410,20 +411,18 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S toolCalls[toolCallDelta.Index] = existingToolCall } } else { - var err error - if toolCallDelta.Type != "function" { - err = &fantasy.Error{Title: "invalid provider response", Message: "expected 'function' type."} - } - if toolCallDelta.ID == "" { - err = &fantasy.Error{Title: "invalid provider response", Message: "expected 'id' to be a string."} - } - if toolCallDelta.Function.Name == "" { - err = &fantasy.Error{Title: "invalid provider response", Message: "expected 'function.name' to be a string."} + // Some provider like Ollama may send empty tool calls or miss some fields. + // We'll skip when we don't have enough info and also assume sane defaults. + if toolCallDelta.Function.Name == "" && toolCallDelta.Function.Arguments == "" { + continue } - if err != nil { + toolCallDelta.Type = cmp.Or(toolCallDelta.Type, "function") + toolCallDelta.ID = cmp.Or(toolCallDelta.ID, fmt.Sprintf("tool-call-%d", toolCallDelta.Index)) + + if toolCallDelta.Type != "function" { yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: toProviderErr(stream.Err()), + Error: &fantasy.Error{Title: "invalid provider response", Message: "expected 'function' type."}, }) return } @@ -453,7 +452,7 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S if xjson.IsValid(toolCalls[toolCallDelta.Index].arguments) { if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeToolInputEnd, - ID: toolCallDelta.ID, + ID: exTc.id, }) { return } From ca0e707061dc851a9a9f5c235cda77d7255ee128 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 20 Mar 2026 17:00:09 -0300 Subject: [PATCH 21/32] v0.16.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index e815b861f..04a373efe 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.15.1 +0.16.0 From eec5a32de4373c03947cf8cf176ff4e564e0a846 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:24:11 +0000 Subject: [PATCH 22/32] chore(deps): bump the all group with 2 updates (#183) Bumps the all group with 2 updates: [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/kaptinlin/jsonschema` from 0.7.5 to 0.7.6 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.5...v0.7.6) Updates `google.golang.org/genai` from 1.50.0 to 1.51.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.50.0...v1.51.0) --- updated-dependencies: - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.51.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 94fb309be..1f10ee72a 100644 --- a/go.mod +++ b/go.mod @@ -16,10 +16,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.5 + github.com/kaptinlin/jsonschema v0.7.6 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.50.0 + google.golang.org/genai v1.51.0 ) require ( @@ -122,7 +122,7 @@ require ( golang.org/x/net v0.51.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.42.0 // indirect - golang.org/x/text v0.34.0 // indirect + golang.org/x/text v0.35.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/api v0.270.0 // indirect google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 // indirect diff --git a/go.sum b/go.sum index 787a55d49..9932560aa 100644 --- a/go.sum +++ b/go.sum @@ -176,8 +176,8 @@ github.com/kaptinlin/go-i18n v0.2.12 h1:ywDsvb4KDFddMC2dpI/rrIzGU2mWUSvHmWUm9BMs github.com/kaptinlin/go-i18n v0.2.12/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.5 h1:jkK4a3NyzNoGlvu12CsL3IcqNMVa5sL51HPVa0nWcPY= -github.com/kaptinlin/jsonschema v0.7.5/go.mod h1:3gIWnptl+SWMyfMR2r4TXXd0xsQZ1m50AKrwmcUONSg= +github.com/kaptinlin/jsonschema v0.7.6 h1:UUMqZGFAk7nOzQsYAxvgygm4wpDp/nwXxA4VP9mCPCs= +github.com/kaptinlin/jsonschema v0.7.6/go.mod h1:GGk/oE+F1lWUfYrzKaCf4QWZmMdytt0LL4XdFEFB0LE= github.com/kaptinlin/messageformat-go v0.4.18 h1:RBlHVWgZyoxTcUgGWBsl2AcyScq/urqbLZvzgryTmSI= github.com/kaptinlin/messageformat-go v0.4.18/go.mod h1:ntI3154RnqJgr7GaC+vZBnIExl2V3sv9selvRNNEM24= github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= @@ -290,8 +290,8 @@ golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= @@ -300,8 +300,8 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.270.0 h1:4rJZbIuWSTohczG9mG2ukSDdt9qKx4sSSHIydTN26L4= google.golang.org/api v0.270.0/go.mod h1:5+H3/8DlXpQWrSz4RjGGwz5HfJAQSEI8Bc6JqQNH77U= -google.golang.org/genai v1.50.0 h1:yHKV/vjoeN9PJ3iF0ur4cBZco4N3Kl7j09rMq7XSoWk= -google.golang.org/genai v1.50.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= +google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 h1:RxhCsti413yL0IjU9dVvuTbCISo8gs3RW1jPMStck+4= google.golang.org/genproto v0.0.0-20260226221140-a57be14db171/go.mod h1:uhvzakVEqAuXU3TC2JCsxIRe5f77l+JySE3EqPoMyqM= google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4= From bdfda5ece73bc7e4e878c7527822f82948023af4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:29:36 +0000 Subject: [PATCH 23/32] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#184) Bumps the kronk group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.21.3 to 1.21.4 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.21.3...v1.21.4) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.21.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 36 +++++++++++++------------- go.sum | 80 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/go.mod b/go.mod index 1f10ee72a..40fc064f3 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.1 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.18.2 - github.com/ardanlabs/kronk v1.21.3 + github.com/ardanlabs/kronk v1.21.4 github.com/aws/aws-sdk-go-v2 v1.41.4 github.com/aws/aws-sdk-go-v2/config v1.32.12 github.com/aws/smithy-go v1.24.2 @@ -29,24 +29,24 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.60.0 // indirect + cloud.google.com/go/storage v1.61.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect @@ -70,14 +70,14 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.17.0 // indirect + github.com/googleapis/gax-go/v2 v2.18.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.4 // indirect + github.com/hashicorp/go-getter v1.8.5 // indirect github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hybridgroup/yzma v1.10.1-0.20260308093636-1875822bb85c // indirect + github.com/hybridgroup/yzma v1.11.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect github.com/kaptinlin/go-i18n v0.2.12 // indirect @@ -114,20 +114,20 @@ require ( go.opentelemetry.io/otel/sdk v1.42.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect go.opentelemetry.io/otel/trace v1.42.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect - golang.org/x/crypto v0.48.0 // indirect - golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect - golang.org/x/net v0.51.0 // indirect + golang.org/x/crypto v0.49.0 // indirect + golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect + golang.org/x/net v0.52.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.42.0 // indirect golang.org/x/text v0.35.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.270.0 // indirect - google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect + google.golang.org/api v0.271.0 // indirect + google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect google.golang.org/grpc v1.79.2 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index 9932560aa..94d6438c5 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7 cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= -cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= +cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= +cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= @@ -40,12 +40,12 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.21.3 h1:FrsmO9nozIKlZ9r6WEFK6v3w/Ia0Lc4CJzhlmMwjszo= -github.com/ardanlabs/kronk v1.21.3/go.mod h1:T6cI9+a39ei0Fmd7TTNFI17dDezeBUu1GGxV/L8FP2I= +github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= +github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 h1:N4lRUXZpZ1KVEUn6hxtco/1d2lgYhNn1fHkkl8WhlyQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= @@ -58,18 +58,18 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDk github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 h1:qi3e/dmpdONhj1RyIZdi6DKKpDXS5Lb8ftr3p7cyHJc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20/go.mod h1:V1K+TeJVD5JOk3D9e5tsX2KUdL7BlB+FV6cBhdobN8c= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 h1:BYf7XNsJMzl4mObARUBUib+j2tf0U//JAAtTnYqvqCw= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11/go.mod h1:aEUS4WrNk/+FxkBZZa7tVgp4pGH+kFGW40Y8rCPqt5g= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 h1:JnQeStZvPHFHeyky/7LbMlyQjUa+jIBj36OlWm0pzIk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19/go.mod h1:HGyasyHvYdFQeJhvDHfH7HXkHh57htcJGKDZ+7z+I24= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 h1:4ExZyubQ6LQQVuF2Qp9OsfEvsTdAWh5Gfwf6PgIdLdk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4/go.mod h1:NF3JcMGOiARAss1ld3WGORCw71+4ExDD2cbbdKS5PpA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= @@ -150,8 +150,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= +github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= +github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -160,12 +160,12 @@ github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1 github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.4 h1:hGEd2xsuVKgwkMtPVufq73fAmZU/x65PPcqH3cb0D9A= -github.com/hashicorp/go-getter v1.8.4/go.mod h1:x27pPGSg9kzoB147QXI8d/nDvp2IgYGcwuRjpaXE9Yg= +github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= +github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.10.1-0.20260308093636-1875822bb85c h1:BzQAPC8cElhU91X/W3Sk5EVoL+Z4zpRsqu08lZZzYJk= -github.com/hybridgroup/yzma v1.10.1-0.20260308093636-1875822bb85c/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/hybridgroup/yzma v1.11.0 h1:dIAs/GoV8imTB1fsFk1ft0ejI5APhUK6iHBSMudbfZc= +github.com/hybridgroup/yzma v1.11.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -258,8 +258,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4W go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= @@ -268,8 +268,8 @@ go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9 go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= -go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -278,12 +278,12 @@ go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa h1:Zt3DZoOFFYkKhDT3v7Lm9FDMEV06GpzjG2jrqW+QTE0= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= -golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= -golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= @@ -294,20 +294,20 @@ golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= -golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.270.0 h1:4rJZbIuWSTohczG9mG2ukSDdt9qKx4sSSHIydTN26L4= -google.golang.org/api v0.270.0/go.mod h1:5+H3/8DlXpQWrSz4RjGGwz5HfJAQSEI8Bc6JqQNH77U= +google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= +google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 h1:RxhCsti413yL0IjU9dVvuTbCISo8gs3RW1jPMStck+4= -google.golang.org/genproto v0.0.0-20260226221140-a57be14db171/go.mod h1:uhvzakVEqAuXU3TC2JCsxIRe5f77l+JySE3EqPoMyqM= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 0cab8bfed4df7148dcbb0ed01c02208b401abea5 Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Tue, 24 Mar 2026 21:29:02 +0100 Subject: [PATCH 24/32] feat: anthropic computer use (#185) --- agent.go | 133 ++- agent_test.go | 463 ++++++++- content.go | 62 +- examples/computer-use/main.go | 103 ++ providers/anthropic/anthropic.go | 139 ++- providers/anthropic/anthropic_test.go | 924 ++++++++++++++++++ providers/anthropic/computer_use.go | 427 ++++++++ providers/anthropic/computer_use_test.go | 303 ++++++ providertests/anthropic_test.go | 185 ++++ .../claude-opus-4-6/computer_use.yaml | 69 ++ .../computer_use_streaming.yaml | 132 +++ .../claude-sonnet-4/computer_use.yaml | 69 ++ .../computer_use_streaming.yaml | 144 +++ 13 files changed, 3100 insertions(+), 53 deletions(-) create mode 100644 examples/computer-use/main.go create mode 100644 providers/anthropic/computer_use.go create mode 100644 providers/anthropic/computer_use_test.go create mode 100644 providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use.yaml create mode 100644 providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use_streaming.yaml create mode 100644 providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use.yaml create mode 100644 providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use_streaming.yaml diff --git a/agent.go b/agent.go index 08d488770..34d4f8a1f 100644 --- a/agent.go +++ b/agent.go @@ -3,6 +3,7 @@ package fantasy import ( "cmp" "context" + "encoding/base64" "encoding/json" "errors" "fmt" @@ -142,9 +143,10 @@ type agentSettings struct { userAgent string providerOptions ProviderOptions - providerDefinedTools []ProviderDefinedTool - tools []AgentTool - maxRetries *int + providerDefinedTools []ProviderDefinedTool + executableProviderTools []ExecutableProviderTool + tools []AgentTool + maxRetries *int model LanguageModel @@ -432,13 +434,17 @@ func (a *agent) Generate(ctx context.Context, opts AgentCall) (*AgentResult, err preparedTools := a.prepareTools(stepTools, a.settings.providerDefinedTools, stepActiveTools, disableAllTools) + // Filter executable provider tools by activeTools at the + // step level, consistent with how stepTools (AgentTools) + // are scoped before being passed to inner functions. + stepExecProviderTools := a.filterExecProviderTools(stepActiveTools) + retryOptions := DefaultRetryOptions() if opts.MaxRetries != nil { retryOptions.MaxRetries = *opts.MaxRetries } retryOptions.OnRetry = opts.OnRetry retry := RetryWithExponentialBackoffRespectingRetryHeaders[*Response](retryOptions) - result, err := retry(ctx, func() (*Response, error) { return stepModel.Generate(ctx, Call{ Prompt: stepInputMessages, @@ -472,15 +478,14 @@ func (a *agent) Generate(ctx context.Context, opts AgentCall) (*AgentResult, err continue } // Validate and potentially repair the tool call - validatedToolCall := a.validateAndRepairToolCall(ctx, toolCall, stepTools, stepSystemPrompt, stepInputMessages, a.settings.repairToolCall) + validatedToolCall := a.validateAndRepairToolCall(ctx, toolCall, stepTools, stepExecProviderTools, stepSystemPrompt, stepInputMessages, a.settings.repairToolCall) stepToolCalls = append(stepToolCalls, validatedToolCall) } } - toolResults, err := a.executeTools(ctx, stepTools, stepToolCalls, nil) + toolResults, err := a.executeTools(ctx, stepTools, stepExecProviderTools, stepToolCalls, nil) - // Build step content with validated tool calls and tool results. - // Provider-executed tool calls are kept as-is. + // Build step content with validated tool calls and tool results. // Provider-executed tool calls are kept as-is. stepContent := []Content{} toolCallIndex := 0 for _, content := range result.Content { @@ -644,7 +649,7 @@ func toResponseMessages(content []Content) []Message { return messages } -func (a *agent) executeTools(ctx context.Context, allTools []AgentTool, toolCalls []ToolCallContent, toolResultCallback func(result ToolResultContent) error) ([]ToolResultContent, error) { +func (a *agent) executeTools(ctx context.Context, allTools []AgentTool, execProviderTools []ExecutableProviderTool, toolCalls []ToolCallContent, toolResultCallback func(result ToolResultContent) error) ([]ToolResultContent, error) { if len(toolCalls) == 0 { return nil, nil } @@ -655,11 +660,16 @@ func (a *agent) executeTools(ctx context.Context, allTools []AgentTool, toolCall toolMap[tool.Info().Name] = tool } + execProviderToolMap := make(map[string]ExecutableProviderTool, len(execProviderTools)) + for _, ept := range execProviderTools { + execProviderToolMap[ept.GetName()] = ept + } + // Execute all tool calls sequentially in order results := make([]ToolResultContent, 0, len(toolCalls)) for _, toolCall := range toolCalls { - result, isCriticalError := a.executeSingleTool(ctx, toolMap, toolCall, toolResultCallback) + result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, toolCall, toolResultCallback) results = append(results, result) if isCriticalError { if errorResult, ok := result.Result.(ToolResultOutputContentError); ok && errorResult.Error != nil { @@ -672,7 +682,7 @@ func (a *agent) executeTools(ctx context.Context, allTools []AgentTool, toolCall } // executeSingleTool executes a single tool and returns its result and a critical error flag. -func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentTool, toolCall ToolCallContent, toolResultCallback func(result ToolResultContent) error) (ToolResultContent, bool) { +func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentTool, execProviderToolMap map[string]ExecutableProviderTool, toolCall ToolCallContent, toolResultCallback func(result ToolResultContent) error) (ToolResultContent, bool) { result := ToolResultContent{ ToolCallID: toolCall.ToolCallID, ToolName: toolCall.ToolName, @@ -690,10 +700,17 @@ func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentT return result, false } - tool, exists := toolMap[toolCall.ToolName] - if !exists { + // Find the run function — either from a regular AgentTool or an + // executable provider tool. + var runTool func(ctx context.Context, call ToolCall) (ToolResponse, error) + if tool, exists := toolMap[toolCall.ToolName]; exists { + runTool = tool.Run + } else if ept, ok := execProviderToolMap[toolCall.ToolName]; ok { + runTool = ept.Run + } + if runTool == nil { result.Result = ToolResultOutputContentError{ - Error: errors.New("Error: Tool not found: " + toolCall.ToolName), + Error: errors.New("tool not found: " + toolCall.ToolName), } if toolResultCallback != nil { _ = toolResultCallback(result) @@ -702,7 +719,7 @@ func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentT } // Execute the tool - toolResult, err := tool.Run(ctx, ToolCall{ + toolResult, err := runTool(ctx, ToolCall{ ID: toolCall.ToolCallID, Name: toolCall.ToolName, Input: toolCall.Input, @@ -725,7 +742,7 @@ func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentT } } else if toolResult.Type == "image" || toolResult.Type == "media" { result.Result = ToolResultOutputContentMedia{ - Data: string(toolResult.Data), + Data: base64.StdEncoding.EncodeToString(toolResult.Data), MediaType: toolResult.MediaType, Text: toolResult.Content, } @@ -834,11 +851,15 @@ func (a *agent) Stream(ctx context.Context, opts AgentStreamCall) (*AgentResult, preparedTools := a.prepareTools(stepTools, a.settings.providerDefinedTools, stepActiveTools, disableAllTools) + // Filter executable provider tools by activeTools at the + // step level, consistent with how stepTools (AgentTools) + // are scoped before being passed to inner functions. + stepExecProviderTools := a.filterExecProviderTools(stepActiveTools) + // Start step stream if opts.OnStepStart != nil { _ = opts.OnStepStart(stepNumber) } - // Create streaming call streamCall := Call{ Prompt: stepInputMessages, @@ -870,11 +891,10 @@ func (a *agent) Stream(ctx context.Context, opts AgentStreamCall) (*AgentResult, } // Process the stream - result, err := a.processStepStream(ctx, stream, opts, steps, stepTools) + result, err := a.processStepStream(ctx, stream, opts, steps, stepTools, stepExecProviderTools) if err != nil { return stepExecutionResult{}, err } - return result, nil }) if err != nil { @@ -921,6 +941,22 @@ func (a *agent) Stream(ctx context.Context, opts AgentStreamCall) (*AgentResult, return agentResult, nil } +// filterExecProviderTools returns the subset of executable provider +// tools permitted by activeTools. When activeTools is empty every +// tool is included (no filtering). +func (a *agent) filterExecProviderTools(activeTools []string) []ExecutableProviderTool { + if len(activeTools) == 0 { + return a.settings.executableProviderTools + } + filtered := make([]ExecutableProviderTool, 0, len(a.settings.executableProviderTools)) + for _, ept := range a.settings.executableProviderTools { + if slices.Contains(activeTools, ept.GetName()) { + filtered = append(filtered, ept) + } + } + return filtered +} + func (a *agent) prepareTools(tools []AgentTool, providerDefinedTools []ProviderDefinedTool, activeTools []string, disableAllTools bool) []Tool { preparedTools := make([]Tool, 0, len(tools)+len(providerDefinedTools)) @@ -961,8 +997,8 @@ func (a *agent) prepareTools(tools []AgentTool, providerDefinedTools []ProviderD } // validateAndRepairToolCall validates a tool call and attempts repair if validation fails. -func (a *agent) validateAndRepairToolCall(ctx context.Context, toolCall ToolCallContent, availableTools []AgentTool, systemPrompt string, messages []Message, repairFunc RepairToolCallFunction) ToolCallContent { - if err := a.validateToolCall(toolCall, availableTools); err == nil { +func (a *agent) validateAndRepairToolCall(ctx context.Context, toolCall ToolCallContent, availableTools []AgentTool, execProviderTools []ExecutableProviderTool, systemPrompt string, messages []Message, repairFunc RepairToolCallFunction) ToolCallContent { + if err := a.validateToolCall(toolCall, availableTools, execProviderTools); err == nil { return toolCall } else { //nolint: revive if repairFunc != nil { @@ -975,7 +1011,7 @@ func (a *agent) validateAndRepairToolCall(ctx context.Context, toolCall ToolCall } if repairedToolCall, repairErr := repairFunc(ctx, repairOptions); repairErr == nil && repairedToolCall != nil { - if validateErr := a.validateToolCall(*repairedToolCall, availableTools); validateErr == nil { + if validateErr := a.validateToolCall(*repairedToolCall, availableTools, execProviderTools); validateErr == nil { return *repairedToolCall } } @@ -989,7 +1025,10 @@ func (a *agent) validateAndRepairToolCall(ctx context.Context, toolCall ToolCall } // validateToolCall validates a tool call against available tools and their schemas. -func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []AgentTool) error { +// Both availableTools and execProviderTools must already be filtered by the +// caller (e.g. via activeTools); this function trusts that the slices +// represent exactly the tools permitted for the current step. +func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []AgentTool, execProviderTools []ExecutableProviderTool) error { var tool AgentTool for _, t := range availableTools { if t.Info().Name == toolCall.ToolName { @@ -999,6 +1038,18 @@ func (a *agent) validateToolCall(toolCall ToolCallContent, availableTools []Agen } if tool == nil { + // Check if this is an executable provider tool. Provider- + // defined tools have their schema enforced server-side, so + // we only validate that the input is parseable JSON. + for _, ept := range execProviderTools { + if ept.GetName() == toolCall.ToolName { + var input map[string]any + if err := json.Unmarshal([]byte(toolCall.Input), &input); err != nil { + return fmt.Errorf("invalid JSON input: %w", err) + } + return nil + } + } return fmt.Errorf("tool not found: %s", toolCall.ToolName) } @@ -1117,12 +1168,25 @@ func WithTools(tools ...AgentTool) AgentOption { } } -// WithProviderDefinedTools sets the provider-defined tools for the agent. -// These tools are executed by the provider (e.g. web search) rather -// than by the client. -func WithProviderDefinedTools(tools ...ProviderDefinedTool) AgentOption { +// WithProviderDefinedTools registers provider-defined tools with the +// agent. Provider-executed tools (e.g. web search) are passed through +// to the API. Client-executed tools (ExecutableProviderTool) are also +// registered for local execution. +func WithProviderDefinedTools(tools ...ProviderTool) AgentOption { return func(s *agentSettings) { - s.providerDefinedTools = append(s.providerDefinedTools, tools...) + for _, t := range tools { + // Every provider tool goes into providerDefinedTools + // for wire formatting. + s.providerDefinedTools = append( + s.providerDefinedTools, t.providerDefinedTool(), + ) + // Executable ones also register for local execution. + if exec, ok := t.(ExecutableProviderTool); ok { + s.executableProviderTools = append( + s.executableProviderTools, exec, + ) + } + } } } @@ -1162,7 +1226,7 @@ func WithOnRetry(callback OnRetryCallback) AgentOption { } // processStepStream processes a single step's stream and returns the step result. -func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, opts AgentStreamCall, _ []StepResult, stepTools []AgentTool) (stepExecutionResult, error) { +func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, opts AgentStreamCall, _ []StepResult, stepTools []AgentTool, execProviderTools []ExecutableProviderTool) (stepExecutionResult, error) { var stepContent []Content var stepToolCalls []ToolCallContent var stepUsage Usage @@ -1195,6 +1259,11 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op toolMap[tool.Info().Name] = tool } + execProviderToolMap := make(map[string]ExecutableProviderTool, len(execProviderTools)) + for _, ept := range execProviderTools { + execProviderToolMap[ept.GetName()] = ept + } + // Semaphores for controlling parallelism parallelSem := make(chan struct{}, 5) var sequentialMu sync.Mutex @@ -1206,7 +1275,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op parallelSem <- struct{}{} toolExecutionWg.Go(func() { defer func() { <-parallelSem }() - result, isCriticalError := a.executeSingleTool(ctx, toolMap, req.toolCall, opts.OnToolResult) + result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) toolStateMu.Lock() toolResults = append(toolResults, result) if isCriticalError && toolExecutionErr == nil { @@ -1218,7 +1287,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op }) } else { sequentialMu.Lock() - result, isCriticalError := a.executeSingleTool(ctx, toolMap, req.toolCall, opts.OnToolResult) + result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) toolStateMu.Lock() toolResults = append(toolResults, result) if isCriticalError && toolExecutionErr == nil { @@ -1389,7 +1458,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op delete(activeToolCalls, part.ID) } else { // Validate and potentially repair the tool call - validatedToolCall := a.validateAndRepairToolCall(ctx, toolCall, stepTools, a.settings.systemPrompt, nil, opts.RepairToolCall) + validatedToolCall := a.validateAndRepairToolCall(ctx, toolCall, stepTools, execProviderTools, a.settings.systemPrompt, nil, opts.RepairToolCall) stepToolCalls = append(stepToolCalls, validatedToolCall) stepContent = append(stepContent, validatedToolCall) diff --git a/agent_test.go b/agent_test.go index 929094b21..8d45429d2 100644 --- a/agent_test.go +++ b/agent_test.go @@ -2,6 +2,7 @@ package fantasy import ( "context" + "encoding/base64" "encoding/json" "errors" "fmt" @@ -1717,7 +1718,7 @@ func TestAgent_MediaToolResponses(t *testing.T) { mediaResult, ok := toolResults[0].Result.(ToolResultOutputContentMedia) require.True(t, ok, "Expected media result") - require.Equal(t, string(imageData), mediaResult.Data) + require.Equal(t, base64.StdEncoding.EncodeToString(imageData), mediaResult.Data) require.Equal(t, "image/png", mediaResult.MediaType) }) @@ -1769,7 +1770,7 @@ func TestAgent_MediaToolResponses(t *testing.T) { mediaResult, ok := toolResults[0].Result.(ToolResultOutputContentMedia) require.True(t, ok, "Expected media result") - require.Equal(t, string(audioData), mediaResult.Data) + require.Equal(t, base64.StdEncoding.EncodeToString(audioData), mediaResult.Data) require.Equal(t, "audio/wav", mediaResult.MediaType) }) @@ -1823,7 +1824,7 @@ func TestAgent_MediaToolResponses(t *testing.T) { mediaResult, ok := toolResults[0].Result.(ToolResultOutputContentMedia) require.True(t, ok, "Expected media result") - require.Equal(t, string(imageData), mediaResult.Data) + require.Equal(t, base64.StdEncoding.EncodeToString(imageData), mediaResult.Data) require.Equal(t, "image/png", mediaResult.MediaType) require.Equal(t, "Screenshot captured successfully", mediaResult.Text) }) @@ -1971,3 +1972,459 @@ func TestToResponseMessages_ProviderExecutedRouting(t *testing.T) { require.Equal(t, "toolu_02", tr2.ToolCallID) require.False(t, tr2.ProviderExecuted) } + +// TestAgent_Generate_ExecutableProviderTool verifies that an +// ExecutableProviderTool registered via WithProviderDefinedTools is +// executed by the agent when the model returns a matching tool call. +func TestAgent_Generate_ExecutableProviderTool(t *testing.T) { + t.Parallel() + + runCalled := false + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + runCalled = true + return NewTextResponse("screenshot taken"), nil + }, + ) + + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + return &Response{ + Content: []Content{ + ToolCallContent{ + ToolCallID: "call-1", + ToolName: "computer", + Input: `{"action":"screenshot"}`, + }, + }, + Usage: Usage{TotalTokens: 10}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "take a screenshot", + }) + + require.NoError(t, err) + require.NotNil(t, result) + require.True(t, runCalled, "expected Run func to be called") + require.Len(t, result.Steps, 1) + + // Verify tool result is in the response. + var toolResults []ToolResultContent + for _, c := range result.Response.Content { + if tr, ok := AsContentType[ToolResultContent](c); ok { + toolResults = append(toolResults, tr) + } + } + require.Len(t, toolResults, 1) + require.Equal(t, "call-1", toolResults[0].ToolCallID) + require.Equal(t, "computer", toolResults[0].ToolName) + + textResult, ok := toolResults[0].Result.(ToolResultOutputContentText) + require.True(t, ok) + require.Equal(t, "screenshot taken", textResult.Text) +} + +// TestAgent_Generate_ExecutableProviderTool_ActiveTools verifies that +// active tool filtering works for ExecutableProviderTool. +func TestAgent_Generate_ExecutableProviderTool_ActiveTools(t *testing.T) { + t.Parallel() + + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + return NewTextResponse("ok"), nil + }, + ) + + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + // With ActiveTools=["other"], computer should be filtered out. + require.Empty(t, call.Tools) + + return &Response{ + Content: []Content{TextContent{Text: "no tools"}}, + Usage: Usage{TotalTokens: 5}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "test", + ActiveTools: []string{"other"}, + }) + + require.NoError(t, err) + require.NotNil(t, result) +} + +// TestAgent_Generate_ExecutableProviderTool_ActiveTools_Rejected +// verifies that a hallucinated tool call for an EPT excluded by +// activeTools is rejected at validation and execution time. +func TestAgent_Generate_ExecutableProviderTool_ActiveTools_Rejected(t *testing.T) { + t.Parallel() + + runCalled := false + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + runCalled = true + return NewTextResponse("ok"), nil + }, + ) + + callCount := 0 + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + callCount++ + if callCount == 1 { + // Model hallucinates a call to the excluded tool. + return &Response{ + Content: []Content{ToolCallContent{ + ToolCallID: "call-1", + ToolName: "computer", + Input: `{"action":"screenshot"}`, + }}, + Usage: Usage{TotalTokens: 5}, + FinishReason: FinishReasonToolCalls, + }, nil + } + // Second call: model stops. + return &Response{ + Content: []Content{TextContent{Text: "done"}}, + Usage: Usage{TotalTokens: 3}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "test", + ActiveTools: []string{"other"}, + }) + + require.NoError(t, err) + require.NotNil(t, result) + require.False(t, runCalled, "excluded EPT should not have been executed") + + // The tool call should have been marked invalid. + var foundInvalidToolResult bool + for _, step := range result.Steps { + for _, content := range step.Content { + if tr, ok := AsContentType[ToolResultContent](content); ok { + if errResult, ok := tr.Result.(ToolResultOutputContentError); ok { + require.Contains(t, errResult.Error.Error(), "tool not found") + foundInvalidToolResult = true + } + } + } + } + require.True(t, foundInvalidToolResult, "expected an error result for the excluded tool call") +} + +// TestAgent_Stream_ExecutableProviderTool verifies that an +// ExecutableProviderTool works through the Stream path. +func TestAgent_Stream_ExecutableProviderTool(t *testing.T) { + t.Parallel() + + runCalled := false + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + runCalled = true + return NewTextResponse("screenshot taken"), nil + }, + ) + + model := &mockLanguageModel{ + streamFunc: func(ctx context.Context, call Call) (StreamResponse, error) { + return func(yield func(StreamPart) bool) { + if !yield(StreamPart{ + Type: StreamPartTypeToolCall, + ID: "call-1", + ToolCallName: "computer", + ToolCallInput: `{"action":"screenshot"}`, + }) { + return + } + yield(StreamPart{ + Type: StreamPartTypeFinish, + FinishReason: FinishReasonStop, + Usage: Usage{TotalTokens: 10}, + }) + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + result, err := agent.Stream(context.Background(), AgentStreamCall{ + Prompt: "take a screenshot", + }) + + require.NoError(t, err) + require.NotNil(t, result) + require.True(t, runCalled, "expected Run func to be called") + require.Len(t, result.Steps, 1) + + // Verify tool result is in the step content. + var toolResults []ToolResultContent + for _, c := range result.Steps[0].Content { + if tr, ok := AsContentType[ToolResultContent](c); ok { + toolResults = append(toolResults, tr) + } + } + require.Len(t, toolResults, 1) + require.Equal(t, "call-1", toolResults[0].ToolCallID) +} + +// TestAgent_PrepareTools_ExecutableProviderTool verifies that +// prepareTools emits a ProviderDefinedTool (not a FunctionTool) when +// an ExecutableProviderTool is registered via WithProviderDefinedTools. +func TestAgent_PrepareTools_ExecutableProviderTool(t *testing.T) { + t.Parallel() + + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + return NewTextResponse("ok"), nil + }, + ) + + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + // Verify the tool is emitted as a ProviderDefinedTool. + require.Len(t, call.Tools, 1) + pdt, ok := call.Tools[0].(ProviderDefinedTool) + require.True(t, ok, "expected ProviderDefinedTool, got %T", call.Tools[0]) + require.Equal(t, "computer", pdt.Name) + require.Equal(t, "test.computer", pdt.ID) + + return &Response{ + Content: []Content{TextContent{Text: "done"}}, + Usage: Usage{TotalTokens: 5}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + _, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "test", + }) + require.NoError(t, err) +} + +// TestAgent_ValidateToolCall_ExecutableProviderTool verifies that +// schema validation is skipped for executable provider tools, but +// JSON parsing is still checked. +func TestAgent_ValidateToolCall_ExecutableProviderTool(t *testing.T) { + t.Parallel() + + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + return NewTextResponse("ok"), nil + }, + ) + + a := &agent{ + settings: agentSettings{ + executableProviderTools: []ExecutableProviderTool{execTool}, + }, + } + + // Valid JSON should pass even without required fields. + err := a.validateToolCall(ToolCallContent{ + ToolName: "computer", + Input: `{"action":"screenshot"}`, + }, []AgentTool{}, []ExecutableProviderTool{execTool}) + require.NoError(t, err) + + // Invalid JSON should still fail. + err = a.validateToolCall(ToolCallContent{ + ToolName: "computer", + Input: `not-json`, + }, []AgentTool{}, []ExecutableProviderTool{execTool}) + require.Error(t, err) + require.Contains(t, err.Error(), "invalid JSON") +} + +// TestAgent_WithProviderDefinedTools_BackwardCompat verifies that +// passing a plain ProviderDefinedTool to WithProviderDefinedTools +// still works (web search path). +func TestAgent_WithProviderDefinedTools_BackwardCompat(t *testing.T) { + t.Parallel() + + webSearch := ProviderDefinedTool{ + ID: "anthropic.web_search", + Name: "web_search", + Args: map[string]any{"max_results": 5}, + } + + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + require.Len(t, call.Tools, 1) + pdt, ok := call.Tools[0].(ProviderDefinedTool) + require.True(t, ok, "expected ProviderDefinedTool, got %T", call.Tools[0]) + require.Equal(t, "web_search", pdt.Name) + require.Equal(t, "anthropic.web_search", pdt.ID) + + return &Response{ + Content: []Content{TextContent{Text: "search results"}}, + Usage: Usage{TotalTokens: 5}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(webSearch)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "search for something", + }) + + require.NoError(t, err) + require.NotNil(t, result) + require.Equal(t, "search results", result.Response.Content.Text()) +} + +// TestAgent_Generate_ExecutableProviderTool_ImageBase64 verifies that +// image data returned by an ExecutableProviderTool's run function is +// base64-encoded when stored in ToolResultOutputContentMedia.Data. +func TestAgent_Generate_ExecutableProviderTool_ImageBase64(t *testing.T) { + t.Parallel() + + rawPNG := []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A} + + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + return NewImageResponse(rawPNG, "image/png"), nil + }, + ) + + callCount := 0 + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + callCount++ + if callCount == 1 { + return &Response{ + Content: []Content{ + ToolCallContent{ + ToolCallID: "call-1", + ToolName: "computer", + Input: `{"action":"screenshot"}`, + }, + }, + Usage: Usage{TotalTokens: 10}, + FinishReason: FinishReasonToolCalls, + }, nil + } + return &Response{ + Content: []Content{TextContent{Text: "done"}}, + Usage: Usage{TotalTokens: 5}, + FinishReason: FinishReasonStop, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "take a screenshot", + }) + + require.NoError(t, err) + require.NotNil(t, result) + require.Len(t, result.Steps, 2) + + // The tool result in the first step must have base64-encoded data. + toolResults := result.Steps[0].Content.ToolResults() + require.Len(t, toolResults, 1) + + mediaResult, ok := toolResults[0].Result.(ToolResultOutputContentMedia) + require.True(t, ok, "expected media result") + require.Equal(t, base64.StdEncoding.EncodeToString(rawPNG), mediaResult.Data) + require.Equal(t, "image/png", mediaResult.MediaType) +} + +// TestAgent_Generate_ExecutableProviderTool_CriticalError verifies +// that a Go error returned from an ExecutableProviderTool's run +// function is treated as a critical error, stopping the agent loop. +func TestAgent_Generate_ExecutableProviderTool_CriticalError(t *testing.T) { + t.Parallel() + + execTool := NewExecutableProviderTool( + ProviderDefinedTool{ + ID: "test.computer", + Name: "computer", + Args: map[string]any{"display_width_px": 1920}, + }, + func(ctx context.Context, call ToolCall) (ToolResponse, error) { + return ToolResponse{}, fmt.Errorf("vnc connection lost") + }, + ) + + callCount := 0 + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + callCount++ + return &Response{ + Content: []Content{ + ToolCallContent{ + ToolCallID: "call-1", + ToolName: "computer", + Input: `{"action":"screenshot"}`, + }, + }, + Usage: Usage{TotalTokens: 10}, + FinishReason: FinishReasonToolCalls, + }, nil + }, + } + + agent := NewAgent(model, WithProviderDefinedTools(execTool), WithStopConditions(StepCountIs(5))) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "take a screenshot", + }) + + require.NoError(t, err) + require.NotNil(t, result) + // The model should only be called once — the critical error stops + // the loop before a second model call. + require.Equal(t, 1, callCount) + require.Len(t, result.Steps, 1) +} diff --git a/content.go b/content.go index 9cbe67ab4..8787f7cd0 100644 --- a/content.go +++ b/content.go @@ -1,6 +1,9 @@ package fantasy -import "encoding/json" +import ( + "context" + "encoding/json" +) // ProviderOptionsData is an interface for provider-specific options data. // All implementations MUST also implement encoding/json.Marshaler and @@ -512,6 +515,16 @@ func (f FunctionTool) GetName() string { return f.Name } +// ProviderTool is a tool whose schema and wire format are defined by +// the model provider. Both pure provider-executed tools +// (ProviderDefinedTool) and client-executed provider tools +// (ExecutableProviderTool) implement this interface. The unexported +// method seals this interface to the types in this package. +// External packages should use NewExecutableProviderTool instead. +type ProviderTool interface { + providerDefinedTool() ProviderDefinedTool +} + // ProviderDefinedTool represents the configuration of a tool that is defined by the provider. type ProviderDefinedTool struct { // ID of the tool. Should follow the format `.`. @@ -532,6 +545,53 @@ func (p ProviderDefinedTool) GetName() string { return p.Name } +func (p ProviderDefinedTool) providerDefinedTool() ProviderDefinedTool { + return p +} + +// ExecutableProviderTool pairs a ProviderDefinedTool with a +// client-side execution function. Use this for provider-defined tools +// that require local execution (e.g. Anthropic computer use). Register +// it via WithProviderDefinedTools. +type ExecutableProviderTool struct { + pdt ProviderDefinedTool + run func(ctx context.Context, call ToolCall) (ToolResponse, error) +} + +func (e ExecutableProviderTool) providerDefinedTool() ProviderDefinedTool { + return e.pdt +} + +// GetType returns the type of the underlying ProviderDefinedTool. +func (e ExecutableProviderTool) GetType() ToolType { + return e.pdt.GetType() +} + +// GetName returns the name of the underlying ProviderDefinedTool. +func (e ExecutableProviderTool) GetName() string { + return e.pdt.GetName() +} + +// Definition returns the underlying ProviderDefinedTool. +func (e ExecutableProviderTool) Definition() ProviderDefinedTool { + return e.pdt +} + +// Run executes the tool's client-side function. +func (e ExecutableProviderTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error) { + return e.run(ctx, call) +} + +// NewExecutableProviderTool creates a provider-defined tool with +// client-side execution. The tool is sent to the API using the +// provider's native wire format, but executed locally by run. +func NewExecutableProviderTool( + pdt ProviderDefinedTool, + run func(ctx context.Context, call ToolCall) (ToolResponse, error), +) ExecutableProviderTool { + return ExecutableProviderTool{pdt: pdt, run: run} +} + // NewUserMessage creates a new user message with the given prompt and optional files. func NewUserMessage(prompt string, files ...FilePart) Message { content := make([]MessagePart, 0, len(files)+1) diff --git a/examples/computer-use/main.go b/examples/computer-use/main.go new file mode 100644 index 000000000..d36a7bdcd --- /dev/null +++ b/examples/computer-use/main.go @@ -0,0 +1,103 @@ +package main + +// This example demonstrates Anthropic computer use with the agent +// helper. It shows how to: +// +// 1. Wire up the provider, model, and computer use tool. +// 2. Register the tool via WithProviderDefinedTools so the agent +// handles the tool-call loop automatically. +// 3. Parse incoming tool calls with ParseComputerUseInput inside +// the Run function. +// 4. Return results (screenshots, errors) back to the agent. + +import ( + "bytes" + "context" + "fmt" + "image" + "image/color" + "image/png" + "os" + + "charm.land/fantasy" + "charm.land/fantasy/providers/anthropic" +) + +// takeScreenshot is a stub that simulates capturing a screenshot. +// In a real implementation this would capture the virtual display +// and return raw PNG bytes. +func takeScreenshot() ([]byte, error) { + // Generate a valid 1x1 black PNG as a placeholder. + img := image.NewRGBA(image.Rect(0, 0, 1, 1)) + img.Set(0, 0, color.Black) + var buf bytes.Buffer + if err := png.Encode(&buf, img); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func main() { + // Set up the Anthropic provider. + provider, err := anthropic.New(anthropic.WithAPIKey(os.Getenv("ANTHROPIC_API_KEY"))) + if err != nil { + fmt.Fprintln(os.Stderr, "could not create provider:", err) + os.Exit(1) + } + + ctx := context.Background() + + // Pick the model. + model, err := provider.LanguageModel(ctx, "claude-opus-4-6") + if err != nil { + fmt.Fprintln(os.Stderr, "could not get language model:", err) + os.Exit(1) + } + + // Create a computer use tool with a Run function that executes + // actions and returns screenshots. + computerTool := anthropic.NewComputerUseTool(anthropic.ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: anthropic.ComputerUse20251124, + }, func(ctx context.Context, call fantasy.ToolCall) (fantasy.ToolResponse, error) { + action, err := anthropic.ParseComputerUseInput(call.Input) + if err != nil { + return fantasy.ToolResponse{}, fmt.Errorf("parse computer use input: %w", err) + } + + fmt.Printf("Action: %s\n", action.Action) + + // In production you would execute the action (click, + // type, scroll, etc.) against the virtual display and + // then capture a screenshot. + png, err := takeScreenshot() + if err != nil { + return fantasy.ToolResponse{}, fmt.Errorf("take screenshot: %w", err) + } + return fantasy.NewImageResponse(png, "image/png"), nil + }) + + // Build an agent with the computer use tool. The agent handles + // the tool-call loop: it sends the prompt, executes any tool + // calls the model returns, feeds the results back, and repeats + // until the model stops requesting tools. + agent := fantasy.NewAgent(model, + fantasy.WithProviderDefinedTools(computerTool), + fantasy.WithStopConditions(fantasy.StepCountIs(10)), + ) + + result, err := agent.Generate(ctx, fantasy.AgentCall{ + Prompt: "Take a screenshot of the desktop", + }) + if err != nil { + fmt.Fprintln(os.Stderr, "agent error:", err) + os.Exit(1) + } + + fmt.Println("Agent finished.") + fmt.Printf("Steps: %d\n", len(result.Steps)) + if text := result.Response.Content.Text(); text != "" { + fmt.Println("Claude said:", text) + } +} diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 330c1ac5f..2f05b2f12 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -25,6 +25,37 @@ import ( "golang.org/x/oauth2/google" ) +// betaRequestOptions converts beta flag strings into request +// options that enable the corresponding Anthropic beta APIs. +func betaRequestOptions(flags []string) []option.RequestOption { + if len(flags) == 0 { + return nil + } + opts := []option.RequestOption{option.WithQuery("beta", "true")} + for _, flag := range flags { + opts = append(opts, option.WithHeaderAdd("anthropic-beta", flag)) + } + return opts +} + +// buildRequestOptions constructs the common request options shared +// by Generate and Stream: user-agent, raw tool injection, and any +// beta API flags. +func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlags []string) []option.RequestOption { + reqOpts := callUARequestOptions(call) + if len(rawTools) > 0 { + // Tools are injected as raw JSON rather than via params.Tools + // because the SDK doesn't model beta tool types (e.g. computer + // use). If the SDK adds validation that reads params.Tools, + // this will need updating. + reqOpts = append(reqOpts, option.WithJSONSet("tools", rawTools)) + } + if len(betaFlags) > 0 { + reqOpts = append(reqOpts, betaRequestOptions(betaFlags)...) + } + return reqOpts +} + const ( // Name is the name of the Anthropic provider. Name = "anthropic" @@ -236,13 +267,19 @@ func (a languageModel) Provider() string { return a.provider } -func (a languageModel) prepareParams(call fantasy.Call) (*anthropic.MessageNewParams, []fantasy.CallWarning, error) { - params := &anthropic.MessageNewParams{} +func (a languageModel) prepareParams(call fantasy.Call) ( + params *anthropic.MessageNewParams, + rawTools []json.RawMessage, + warnings []fantasy.CallWarning, + betaFlags []string, + err error, +) { + params = &anthropic.MessageNewParams{} providerOptions := &ProviderOptions{} if v, ok := call.ProviderOptions[Name]; ok { providerOptions, ok = v.(*ProviderOptions) if !ok { - return nil, nil, &fantasy.Error{Title: "invalid argument", Message: "anthropic provider options should be *anthropic.ProviderOptions"} + return nil, nil, nil, nil, &fantasy.Error{Title: "invalid argument", Message: "anthropic provider options should be *anthropic.ProviderOptions"} } } sendReasoning := true @@ -293,7 +330,7 @@ func (a languageModel) prepareParams(call fantasy.Call) (*anthropic.MessageNewPa params.Thinking.OfAdaptive = &adaptive case providerOptions.Thinking != nil: if providerOptions.Thinking.BudgetTokens == 0 { - return nil, nil, &fantasy.Error{Title: "no budget", Message: "thinking requires budget"} + return nil, nil, nil, nil, &fantasy.Error{Title: "no budget", Message: "thinking requires budget"} } params.Thinking = anthropic.ThinkingConfigParamOfEnabled(providerOptions.Thinking.BudgetTokens) if call.Temperature != nil { @@ -327,15 +364,16 @@ func (a languageModel) prepareParams(call fantasy.Call) (*anthropic.MessageNewPa if providerOptions.DisableParallelToolUse != nil { disableParallelToolUse = *providerOptions.DisableParallelToolUse } - tools, toolChoice, toolWarnings := a.toTools(call.Tools, call.ToolChoice, disableParallelToolUse) - params.Tools = tools + var toolChoice *anthropic.ToolChoiceUnionParam + var toolWarnings []fantasy.CallWarning + rawTools, toolChoice, toolWarnings, betaFlags = a.toTools(call.Tools, call.ToolChoice, disableParallelToolUse) if toolChoice != nil { params.ToolChoice = *toolChoice } warnings = append(warnings, toolWarnings...) } - return params, warnings, nil + return params, rawTools, warnings, betaFlags, nil } func (a *provider) Name() string { @@ -447,6 +485,19 @@ func anyToStringSlice(v any) []string { const maxExactIntFloat64 = float64(1<<53 - 1) +// asProviderDefinedTool extracts the ProviderDefinedTool from a +// Tool, handling both ProviderDefinedTool and +// ExecutableProviderTool. +func asProviderDefinedTool(tool fantasy.Tool) (fantasy.ProviderDefinedTool, bool) { + if pdt, ok := tool.(fantasy.ProviderDefinedTool); ok { + return pdt, true + } + if ept, ok := tool.(fantasy.ExecutableProviderTool); ok { + return ept.Definition(), true + } + return fantasy.ProviderDefinedTool{}, false +} + func anyToInt64(v any) (int64, bool) { switch typed := v.(type) { case int: @@ -528,7 +579,7 @@ func anyToUserLocation(v any) *UserLocation { } } -func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolChoice, disableParallelToolCalls bool) (anthropicTools []anthropic.ToolUnionParam, anthropicToolChoice *anthropic.ToolChoiceUnionParam, warnings []fantasy.CallWarning) { +func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolChoice, disableParallelToolCalls bool) (rawTools []json.RawMessage, anthropicToolChoice *anthropic.ToolChoiceUnionParam, warnings []fantasy.CallWarning, betaFlags []string) { for _, tool := range tools { if tool.GetType() == fantasy.ToolTypeFunction { ft, ok := tool.(fantasy.FunctionTool) @@ -558,11 +609,20 @@ func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolCho if cacheControl != nil { anthropicTool.CacheControl = anthropic.NewCacheControlEphemeralParam() } - anthropicTools = append(anthropicTools, anthropic.ToolUnionParam{OfTool: &anthropicTool}) + raw, err := json.Marshal(anthropic.ToolUnionParam{OfTool: &anthropicTool}) + if err != nil { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Tool: tool, + Message: fmt.Sprintf("failed to marshal function tool: %v", err), + }) + continue + } + rawTools = append(rawTools, raw) continue } if tool.GetType() == fantasy.ToolTypeProviderDefined { - pt, ok := tool.(fantasy.ProviderDefinedTool) + pt, ok := asProviderDefinedTool(tool) if !ok { continue } @@ -596,11 +656,52 @@ func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolCho webSearchTool.UserLocation = ulp } } - anthropicTools = append(anthropicTools, anthropic.ToolUnionParam{ + raw, err := json.Marshal(anthropic.ToolUnionParam{ OfWebSearchTool20250305: &webSearchTool, }) + if err != nil { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Tool: tool, + Message: fmt.Sprintf("failed to marshal web search tool: %v", err), + }) + continue + } + rawTools = append(rawTools, raw) + continue + } + if IsComputerUseTool(tool) { + raw, err := computerUseToolJSON(pt) + if err != nil { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Tool: tool, + Message: fmt.Sprintf("failed to build computer use tool: %v", err), + }) + continue + } + version, ok := getComputerUseVersion(pt) + if ok { + flag, err := computerUseBetaFlag(version) + if err != nil { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Tool: tool, + Message: fmt.Sprintf("unsupported computer use version: %v", err), + }) + continue + } + betaFlags = append(betaFlags, flag) + } + rawTools = append(rawTools, raw) continue } + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeUnsupportedTool, + Tool: tool, + Message: "tool is not supported", + }) + continue } warnings = append(warnings, fantasy.CallWarning{ Type: fantasy.CallWarningTypeUnsupportedTool, @@ -624,7 +725,7 @@ func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolCho }, } } - return anthropicTools, anthropicToolChoice, warnings + return rawTools, anthropicToolChoice, warnings, betaFlags } switch *toolChoice { @@ -656,7 +757,7 @@ func (a languageModel) toTools(tools []fantasy.Tool, toolChoice *fantasy.ToolCho }, } } - return anthropicTools, anthropicToolChoice, warnings + return rawTools, anthropicToolChoice, warnings, betaFlags } func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBlockParam, []anthropic.MessageParam, []fantasy.CallWarning) { @@ -1005,11 +1106,13 @@ func mapFinishReason(finishReason string) fantasy.FinishReason { // Generate implements fantasy.LanguageModel. func (a languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) { - params, warnings, err := a.prepareParams(call) + params, rawTools, warnings, betaFlags, err := a.prepareParams(call) if err != nil { return nil, err } - response, err := a.client.Messages.New(ctx, *params, callUARequestOptions(call)...) + reqOpts := buildRequestOptions(call, rawTools, betaFlags) + + response, err := a.client.Messages.New(ctx, *params, reqOpts...) if err != nil { return nil, toProviderErr(err) } @@ -1132,12 +1235,14 @@ func (a languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas // Stream implements fantasy.LanguageModel. func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) { - params, warnings, err := a.prepareParams(call) + params, rawTools, warnings, betaFlags, err := a.prepareParams(call) if err != nil { return nil, err } - stream := a.client.Messages.NewStreaming(ctx, *params, callUARequestOptions(call)...) + reqOpts := buildRequestOptions(call, rawTools, betaFlags) + + stream := a.client.Messages.NewStreaming(ctx, *params, reqOpts...) acc := anthropic.Message{} return func(yield func(fantasy.StreamPart) bool) { if len(warnings) > 0 { diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 5f137a78b..4387a34fa 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -8,6 +8,7 @@ import ( "math" "net/http" "net/http/httptest" + "strings" "testing" "time" @@ -16,6 +17,12 @@ import ( "github.com/stretchr/testify/require" ) +// noopComputerRun is a no-op run function for tests that only need +// to inspect the tool definition, not execute it. +var noopComputerRun = func(_ context.Context, _ fantasy.ToolCall) (fantasy.ToolResponse, error) { + return fantasy.ToolResponse{}, nil +} + func TestToPrompt_DropsEmptyMessages(t *testing.T) { t.Parallel() @@ -1364,3 +1371,920 @@ func TestGenerate_ToolChoiceNone(t *testing.T) { require.True(t, ok, "request body should have tool_choice") require.Equal(t, "none", toolChoice["type"], "tool_choice should be 'none'") } + +// --- Computer Use Tests --- + +// jsonRoundTripTool simulates a JSON round-trip on a +// ProviderDefinedTool so that its Args map contains float64 +// values (as json.Unmarshal produces) rather than the int64 +// values that NewComputerUseTool stores directly. The +// production toBetaTools code asserts float64. +func jsonRoundTripTool(t *testing.T, tool fantasy.ExecutableProviderTool) fantasy.ProviderDefinedTool { + t.Helper() + pdt := tool.Definition() + data, err := json.Marshal(pdt.Args) + require.NoError(t, err) + var args map[string]any + require.NoError(t, json.Unmarshal(data, &args)) + pdt.Args = args + return pdt +} + +func TestNewComputerUseTool(t *testing.T) { + t.Parallel() + + t.Run("creates tool with correct ID and name", func(t *testing.T) { + t.Parallel() + tool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun).Definition() + require.Equal(t, "anthropic.computer", tool.ID) + require.Equal(t, "computer", tool.Name) + require.Equal(t, int64(1920), tool.Args["display_width_px"]) + require.Equal(t, int64(1080), tool.Args["display_height_px"]) + require.Equal(t, string(ComputerUse20250124), tool.Args["tool_version"]) + }) + + t.Run("includes optional fields when set", func(t *testing.T) { + t.Parallel() + displayNum := int64(1) + enableZoom := true + tool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1024, + DisplayHeightPx: 768, + DisplayNumber: &displayNum, + EnableZoom: &enableZoom, + ToolVersion: ComputerUse20251124, + CacheControl: &CacheControl{Type: "ephemeral"}, + }, noopComputerRun).Definition() + require.Equal(t, int64(1), tool.Args["display_number"]) + require.Equal(t, true, tool.Args["enable_zoom"]) + require.NotNil(t, tool.Args["cache_control"]) + }) + + t.Run("omits optional fields when nil", func(t *testing.T) { + t.Parallel() + tool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun).Definition() + _, hasDisplayNum := tool.Args["display_number"] + _, hasEnableZoom := tool.Args["enable_zoom"] + _, hasCacheControl := tool.Args["cache_control"] + require.False(t, hasDisplayNum) + require.False(t, hasEnableZoom) + require.False(t, hasCacheControl) + }) +} + +func TestIsComputerUseTool(t *testing.T) { + t.Parallel() + + t.Run("returns true for computer use tool", func(t *testing.T) { + t.Parallel() + tool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun) + require.True(t, IsComputerUseTool(tool.Definition())) + }) + + t.Run("returns false for function tool", func(t *testing.T) { + t.Parallel() + tool := fantasy.FunctionTool{ + Name: "test", + Description: "test tool", + } + require.False(t, IsComputerUseTool(tool)) + }) + + t.Run("returns false for other provider defined tool", func(t *testing.T) { + t.Parallel() + tool := fantasy.ProviderDefinedTool{ + ID: "other.tool", + Name: "other", + } + require.False(t, IsComputerUseTool(tool)) + }) +} + +func TestNeedsBetaAPI(t *testing.T) { + t.Parallel() + + lm := languageModel{options: options{}} + + t.Run("returns false for empty tools", func(t *testing.T) { + t.Parallel() + _, _, _, betaFlags := lm.toTools(nil, nil, false) + require.Empty(t, betaFlags) + _, _, _, betaFlags = lm.toTools([]fantasy.Tool{}, nil, false) + require.Empty(t, betaFlags) + }) + + t.Run("returns false for only function tools", func(t *testing.T) { + t.Parallel() + tools := []fantasy.Tool{ + fantasy.FunctionTool{Name: "test"}, + } + _, _, _, betaFlags := lm.toTools(tools, nil, false) + require.Empty(t, betaFlags) + }) + + t.Run("returns beta flags when computer use tool present", func(t *testing.T) { + t.Parallel() + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + tools := []fantasy.Tool{ + fantasy.FunctionTool{Name: "test"}, + cuTool, + } + _, _, _, betaFlags := lm.toTools(tools, nil, false) + require.NotEmpty(t, betaFlags) + }) +} + +func TestComputerUseToolJSON(t *testing.T) { + t.Parallel() + + t.Run("builds JSON for version 20250124", func(t *testing.T) { + t.Parallel() + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + data, err := computerUseToolJSON(cuTool) + require.NoError(t, err) + var m map[string]any + require.NoError(t, json.Unmarshal(data, &m)) + require.Equal(t, "computer_20250124", m["type"]) + require.Equal(t, "computer", m["name"]) + require.InDelta(t, 1920, m["display_width_px"], 0) + require.InDelta(t, 1080, m["display_height_px"], 0) + }) + + t.Run("builds JSON for version 20251124 with enable_zoom", func(t *testing.T) { + t.Parallel() + enableZoom := true + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1024, + DisplayHeightPx: 768, + EnableZoom: &enableZoom, + ToolVersion: ComputerUse20251124, + }, noopComputerRun)) + data, err := computerUseToolJSON(cuTool) + require.NoError(t, err) + var m map[string]any + require.NoError(t, json.Unmarshal(data, &m)) + require.Equal(t, "computer_20251124", m["type"]) + require.Equal(t, true, m["enable_zoom"]) + }) + + t.Run("handles int64 args without JSON round-trip", func(t *testing.T) { + t.Parallel() + // Direct construction stores int64 values. + cuTool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun) + data, err := computerUseToolJSON(cuTool.Definition()) + require.NoError(t, err) + var m map[string]any + require.NoError(t, json.Unmarshal(data, &m)) + require.InDelta(t, 1920, m["display_width_px"], 0) + }) + + t.Run("returns error when version is missing", func(t *testing.T) { + t.Parallel() + pdt := fantasy.ProviderDefinedTool{ + ID: "anthropic.computer", + Name: "computer", + Args: map[string]any{ + "display_width_px": float64(1920), + "display_height_px": float64(1080), + }, + } + _, err := computerUseToolJSON(pdt) + require.Error(t, err) + require.Contains(t, err.Error(), "tool_version arg is missing") }) + + t.Run("returns error for unsupported version", func(t *testing.T) { + t.Parallel() + pdt := fantasy.ProviderDefinedTool{ + ID: "anthropic.computer", + Name: "computer", + Args: map[string]any{ + "display_width_px": float64(1920), + "display_height_px": float64(1080), + "tool_version": "computer_99991231", + }, + } + _, err := computerUseToolJSON(pdt) + require.Error(t, err) + require.Contains(t, err.Error(), "unsupported") + }) +} + +func TestParseComputerUseInput_CoordinateValidation(t *testing.T) { + t.Parallel() + + t.Run("rejects coordinate with 1 element", func(t *testing.T) { + t.Parallel() + _, err := ParseComputerUseInput(`{"action":"left_click","coordinate":[100]}`) + require.Error(t, err) + require.Contains(t, err.Error(), "coordinate") + }) + + t.Run("rejects coordinate with 3 elements", func(t *testing.T) { + t.Parallel() + _, err := ParseComputerUseInput(`{"action":"left_click","coordinate":[100,200,300]}`) + require.Error(t, err) + require.Contains(t, err.Error(), "coordinate") + }) + + t.Run("rejects start_coordinate with 1 element", func(t *testing.T) { + t.Parallel() + _, err := ParseComputerUseInput(`{"action":"left_click_drag","coordinate":[100,200],"start_coordinate":[50]}`) + require.Error(t, err) + require.Contains(t, err.Error(), "start_coordinate") + }) + + t.Run("rejects region with 3 elements", func(t *testing.T) { + t.Parallel() + _, err := ParseComputerUseInput(`{"action":"zoom","region":[10,20,30]}`) + require.Error(t, err) + require.Contains(t, err.Error(), "region") + }) + + t.Run("accepts valid coordinate", func(t *testing.T) { + t.Parallel() + result, err := ParseComputerUseInput(`{"action":"left_click","coordinate":[100,200]}`) + require.NoError(t, err) + require.Equal(t, [2]int64{100, 200}, result.Coordinate) + }) + + t.Run("accepts absent optional arrays", func(t *testing.T) { + t.Parallel() + result, err := ParseComputerUseInput(`{"action":"screenshot"}`) + require.NoError(t, err) + require.Equal(t, ActionScreenshot, result.Action) + }) +} + +func TestToTools_RawJSON(t *testing.T) { + t.Parallel() + + lm := languageModel{options: options{}} + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + + tools := []fantasy.Tool{ + fantasy.FunctionTool{ + Name: "weather", + Description: "Get weather", + InputSchema: map[string]any{ + "properties": map[string]any{ + "location": map[string]any{"type": "string"}, + }, + "required": []string{"location"}, + }, + }, + WebSearchTool(nil), + cuTool, + } + + rawTools, toolChoice, warnings, betaFlags := lm.toTools(tools, nil, false) + + require.Len(t, rawTools, 3) + require.Nil(t, toolChoice) + require.Empty(t, warnings) + require.NotEmpty(t, betaFlags) + + // Verify each raw tool is valid JSON. + for i, raw := range rawTools { + var m map[string]any + require.NoError(t, json.Unmarshal(raw, &m), "tool %d should be valid JSON", i) + } + + // Check function tool. + var funcTool map[string]any + require.NoError(t, json.Unmarshal(rawTools[0], &funcTool)) + require.Equal(t, "weather", funcTool["name"]) + + // Check web search tool. + var webTool map[string]any + require.NoError(t, json.Unmarshal(rawTools[1], &webTool)) + require.Equal(t, "web_search_20250305", webTool["type"]) + + // Check computer use tool. + var cuToolJSON map[string]any + require.NoError(t, json.Unmarshal(rawTools[2], &cuToolJSON)) + require.Equal(t, "computer_20250124", cuToolJSON["type"]) + require.Equal(t, "computer", cuToolJSON["name"]) +} + +func TestGenerate_BetaAPI(t *testing.T) { + t.Parallel() + + t.Run("sends beta header for computer use", func(t *testing.T) { + t.Parallel() + + var capturedHeaders http.Header + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + capturedHeaders = r.Header.Clone() + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(mockAnthropicGenerateResponse()) + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + + _, err = model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + require.Contains(t, capturedHeaders.Get("Anthropic-Beta"), "computer-use-2025-01-24") + }) + + t.Run("sends beta header for computer use 20251124", func(t *testing.T) { + t.Parallel() + + var capturedHeaders http.Header + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + capturedHeaders = r.Header.Clone() + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(mockAnthropicGenerateResponse()) + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20251124, + }, noopComputerRun)) + + _, err = model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + require.Contains(t, capturedHeaders.Get("Anthropic-Beta"), "computer-use-2025-11-24") + }) + + t.Run("returns tool use from beta response", func(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": "msg_01Test", + "type": "message", + "role": "assistant", + "model": "claude-sonnet-4-20250514", + "content": []any{ + map[string]any{ + "type": "tool_use", + "id": "toolu_01", + "name": "computer", + "input": map[string]any{"action": "screenshot"}, + }, + }, + "stop_reason": "tool_use", + "usage": map[string]any{ + "input_tokens": 10, + "output_tokens": 5, + "cache_creation": map[string]any{ + "ephemeral_1h_input_tokens": 0, + "ephemeral_5m_input_tokens": 0, + }, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "server_tool_use": map[string]any{ + "web_search_requests": 0, + }, + "service_tier": "standard", + }, + }) + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + + resp, err := model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + + toolCalls := resp.Content.ToolCalls() + require.Len(t, toolCalls, 1) + require.Equal(t, "computer", toolCalls[0].ToolName) + require.Equal(t, "toolu_01", toolCalls[0].ToolCallID) + require.Contains(t, toolCalls[0].Input, "screenshot") + require.Equal(t, fantasy.FinishReasonToolCalls, resp.FinishReason) + + // Verify typed parsing works on the tool call input. + parsed, err := ParseComputerUseInput(toolCalls[0].Input) + require.NoError(t, err) + require.Equal(t, ActionScreenshot, parsed.Action) + }) +} + +func TestStream_BetaAPI(t *testing.T) { + t.Parallel() + + t.Run("streams via beta API for computer use", func(t *testing.T) { + t.Parallel() + + var capturedHeaders http.Header + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + capturedHeaders = r.Header.Clone() + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.WriteHeader(http.StatusOK) + chunks := []string{ + "event: message_start\n", + "data: {\"type\":\"message_start\",\"message\":{}}\n\n", + "event: message_stop\n", + "data: {\"type\":\"message_stop\"}\n\n", + } + for _, chunk := range chunks { + _, _ = fmt.Fprint(w, chunk) + if flusher, ok := w.(http.Flusher); ok { + flusher.Flush() + } + } + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun)) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + + stream(func(fantasy.StreamPart) bool { return true }) + + require.Contains(t, capturedHeaders.Get("Anthropic-Beta"), "computer-use-2025-01-24") + }) + + t.Run("streams via beta API for computer use 20251124", func(t *testing.T) { + t.Parallel() + + var capturedHeaders http.Header + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + capturedHeaders = r.Header.Clone() + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.WriteHeader(http.StatusOK) + chunks := []string{ + "event: message_start\n", + "data: {\"type\":\"message_start\",\"message\":{}}\n\n", + "event: message_stop\n", + "data: {\"type\":\"message_stop\"}\n\n", + } + for _, chunk := range chunks { + _, _ = fmt.Fprint(w, chunk) + if flusher, ok := w.(http.Flusher); ok { + flusher.Flush() + } + } + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20251124, + }, noopComputerRun)) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + + stream(func(fantasy.StreamPart) bool { return true }) + + require.Contains(t, capturedHeaders.Get("Anthropic-Beta"), "computer-use-2025-11-24") + }) +} + +// TestGenerate_ComputerUseTool runs a multi-turn computer use session +// via model.Generate, passing the ExecutableProviderTool directly into +// Call.Tools (no .Definition(), no jsonRoundTripTool). The mock server +// walks through a scripted sequence of actions — screenshot, click, +// type, key, scroll — then finishes with a text reply. Each turn the +// test parses the tool call, builds a screenshot result, and appends +// both to the prompt for the next request. +func TestGenerate_ComputerUseTool(t *testing.T) { + t.Parallel() + + type actionStep struct { + input map[string]any + want ComputerUseInput + } + steps := []actionStep{ + { + input: map[string]any{"action": "screenshot"}, + want: ComputerUseInput{Action: ActionScreenshot}, + }, + { + input: map[string]any{"action": "left_click", "coordinate": []any{100, 200}}, + want: ComputerUseInput{Action: ActionLeftClick, Coordinate: [2]int64{100, 200}}, + }, + { + input: map[string]any{"action": "type", "text": "hello world"}, + want: ComputerUseInput{Action: ActionType, Text: "hello world"}, + }, + { + input: map[string]any{"action": "key", "text": "Return"}, + want: ComputerUseInput{Action: ActionKey, Text: "Return"}, + }, + { + input: map[string]any{ + "action": "scroll", + "coordinate": []any{500, 300}, + "scroll_direction": "down", + "scroll_amount": 3, + }, + want: ComputerUseInput{ + Action: ActionScroll, + Coordinate: [2]int64{500, 300}, + ScrollDirection: "down", + ScrollAmount: 3, + }, + }, + { + input: map[string]any{"action": "screenshot"}, + want: ComputerUseInput{Action: ActionScreenshot}, + }, + } + + var ( + requestIdx int + betaHeaders []string + ) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + betaHeaders = append(betaHeaders, r.Header.Get("Anthropic-Beta")) + idx := requestIdx + requestIdx++ + + w.Header().Set("Content-Type", "application/json") + if idx < len(steps) { + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": fmt.Sprintf("msg_%02d", idx), + "type": "message", + "role": "assistant", + "model": "claude-sonnet-4-20250514", + "content": []any{map[string]any{ + "type": "tool_use", + "id": fmt.Sprintf("toolu_%02d", idx), + "name": "computer", + "input": steps[idx].input, + }}, + "stop_reason": "tool_use", + "usage": map[string]any{"input_tokens": 10, "output_tokens": 5}, + }) + return + } + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": "msg_final", + "type": "message", + "role": "assistant", + "model": "claude-sonnet-4-20250514", + "content": []any{map[string]any{ + "type": "text", + "text": "Done! I have completed all the requested actions.", + }}, + "stop_reason": "end_turn", + "usage": map[string]any{"input_tokens": 10, "output_tokens": 15}, + }) + })) + defer server.Close() + + provider, err := New(WithAPIKey("test-api-key"), WithBaseURL(server.URL)) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + // Pass the ExecutableProviderTool directly — the whole point is + // to verify that the Tool interface works without unwrapping. + cuTool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun) + + var got []ComputerUseInput + prompt := testPrompt() + fakePNG := []byte("fake-screenshot-png") + + for turn := 0; turn <= len(steps); turn++ { + resp, err := model.Generate(context.Background(), fantasy.Call{ + Prompt: prompt, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err, "turn %d", turn) + + if resp.FinishReason != fantasy.FinishReasonToolCalls { + require.Equal(t, fantasy.FinishReasonStop, resp.FinishReason) + require.Contains(t, resp.Content.Text(), "Done") + break + } + + toolCalls := resp.Content.ToolCalls() + require.Len(t, toolCalls, 1, "turn %d", turn) + require.Equal(t, "computer", toolCalls[0].ToolName, "turn %d", turn) + + parsed, err := ParseComputerUseInput(toolCalls[0].Input) + require.NoError(t, err, "turn %d", turn) + got = append(got, parsed) + + // Build the next prompt: append the assistant tool-call turn + // and the user screenshot-result turn. + prompt = append(prompt, + fantasy.Message{ + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: toolCalls[0].ToolCallID, + ToolName: toolCalls[0].ToolName, + Input: toolCalls[0].Input, + }, + }, + }, + fantasy.Message{ + // Use MessageRoleTool for tool results — this matches + // what the agent loop produces. + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + NewComputerUseScreenshotResult(toolCalls[0].ToolCallID, fakePNG), + }, + }, + ) + } + + // Every scripted action was received and parsed correctly. + require.Len(t, got, len(steps)) + for i, step := range steps { + require.Equal(t, step.want.Action, got[i].Action, "step %d", i) + require.Equal(t, step.want.Coordinate, got[i].Coordinate, "step %d", i) + require.Equal(t, step.want.Text, got[i].Text, "step %d", i) + require.Equal(t, step.want.ScrollDirection, got[i].ScrollDirection, "step %d", i) + require.Equal(t, step.want.ScrollAmount, got[i].ScrollAmount, "step %d", i) + } + + // Beta header was sent on every request. + require.Len(t, betaHeaders, len(steps)+1) + for i, h := range betaHeaders { + require.Contains(t, h, "computer-use-2025-01-24", "request %d", i) + } +} + +// TestStream_ComputerUseTool runs a multi-turn computer use session +// via model.Stream, verifying that the ExecutableProviderTool works +// through the streaming path end-to-end. +func TestStream_ComputerUseTool(t *testing.T) { + t.Parallel() + + type streamStep struct { + input map[string]any + wantAction ComputerAction + } + steps := []streamStep{ + {input: map[string]any{"action": "screenshot"}, wantAction: ActionScreenshot}, + {input: map[string]any{"action": "left_click", "coordinate": []any{150, 250}}, wantAction: ActionLeftClick}, + {input: map[string]any{"action": "type", "text": "search query"}, wantAction: ActionType}, + } + + var ( + requestIdx int + betaHeaders []string + ) + + // streamToolUseChunks returns SSE chunks for a single + // computer-use tool_use content block. + streamToolUseChunks := func(id string, input map[string]any) []string { + inputJSON, _ := json.Marshal(input) + escaped := strings.ReplaceAll(string(inputJSON), `"`, `\"`) + return []string{ + "event: message_start\n", + `data: {"type":"message_start","message":{"id":"` + id + `","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-20250514","stop_reason":null,"usage":{"input_tokens":10,"output_tokens":0}}}` + "\n\n", + "event: content_block_start\n", + `data: {"type":"content_block_start","index":0,"content_block":{"type":"tool_use","id":"` + id + `","name":"computer","input":{}}}` + "\n\n", + "event: content_block_delta\n", + `data: {"type":"content_block_delta","index":0,"delta":{"type":"input_json_delta","partial_json":"` + escaped + `"}}` + "\n\n", + "event: content_block_stop\n", + `data: {"type":"content_block_stop","index":0}` + "\n\n", + "event: message_delta\n", + `data: {"type":"message_delta","delta":{"stop_reason":"tool_use"},"usage":{"output_tokens":5}}` + "\n\n", + "event: message_stop\n", + `data: {"type":"message_stop"}` + "\n\n", + } + } + + streamTextChunks := func() []string { + return []string{ + "event: message_start\n", + `data: {"type":"message_start","message":{"id":"msg_final","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-20250514","stop_reason":null,"usage":{"input_tokens":10,"output_tokens":0}}}` + "\n\n", + "event: content_block_start\n", + `data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}` + "\n\n", + "event: content_block_delta\n", + `data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"All done."}}` + "\n\n", + "event: content_block_stop\n", + `data: {"type":"content_block_stop","index":0}` + "\n\n", + "event: message_delta\n", + `data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":10}}` + "\n\n", + "event: message_stop\n", + `data: {"type":"message_stop"}` + "\n\n", + } + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + betaHeaders = append(betaHeaders, r.Header.Get("Anthropic-Beta")) + idx := requestIdx + requestIdx++ + + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.WriteHeader(http.StatusOK) + + var chunks []string + if idx < len(steps) { + chunks = streamToolUseChunks( + fmt.Sprintf("toolu_%02d", idx), + steps[idx].input, + ) + } else { + chunks = streamTextChunks() + } + for _, chunk := range chunks { + _, _ = fmt.Fprint(w, chunk) + if f, ok := w.(http.Flusher); ok { + f.Flush() + } + } + })) + defer server.Close() + + provider, err := New(WithAPIKey("test-api-key"), WithBaseURL(server.URL)) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + cuTool := NewComputerUseTool(ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: ComputerUse20250124, + }, noopComputerRun) + + var gotActions []ComputerAction + prompt := testPrompt() + fakePNG := []byte("fake-screenshot-png") + + for turn := 0; turn <= len(steps); turn++ { + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: prompt, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err, "turn %d", turn) + + var ( + toolCallName string + toolCallID string + toolCallInput string + finishReason fantasy.FinishReason + gotText string + ) + stream(func(part fantasy.StreamPart) bool { + switch part.Type { + case fantasy.StreamPartTypeToolCall: + toolCallName = part.ToolCallName + toolCallID = part.ID + toolCallInput = part.ToolCallInput + case fantasy.StreamPartTypeFinish: + finishReason = part.FinishReason + case fantasy.StreamPartTypeTextDelta: + gotText += part.Delta + } + return true + }) + + if finishReason != fantasy.FinishReasonToolCalls { + require.Contains(t, gotText, "All done") + break + } + + require.Equal(t, "computer", toolCallName, "turn %d", turn) + + parsed, err := ParseComputerUseInput(toolCallInput) + require.NoError(t, err, "turn %d", turn) + gotActions = append(gotActions, parsed.Action) + + prompt = append(prompt, + fantasy.Message{ + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: toolCallID, + ToolName: toolCallName, + Input: toolCallInput, + }, + }, + }, + fantasy.Message{ + // Use MessageRoleTool for tool results — this matches + // what the agent loop produces. + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + NewComputerUseScreenshotResult(toolCallID, fakePNG), + }, + }, + ) + } + + require.Len(t, gotActions, len(steps)) + for i, step := range steps { + require.Equal(t, step.wantAction, gotActions[i], "step %d", i) + } + + require.Len(t, betaHeaders, len(steps)+1) + for i, h := range betaHeaders { + require.Contains(t, h, "computer-use-2025-01-24", "request %d", i) + } +} diff --git a/providers/anthropic/computer_use.go b/providers/anthropic/computer_use.go new file mode 100644 index 000000000..f4526e9ae --- /dev/null +++ b/providers/anthropic/computer_use.go @@ -0,0 +1,427 @@ +package anthropic + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + + "charm.land/fantasy" + anthropicsdk "github.com/charmbracelet/anthropic-sdk-go" + "github.com/charmbracelet/anthropic-sdk-go/packages/param" +) + +// computerUseToolID is the canonical identifier for +// Anthropic computer use tools. It follows the +// . convention used by ProviderDefinedTool.ID. +const computerUseToolID = "anthropic.computer" + +// computerUseAPIName is the tool name Anthropic's API expects +// on the wire. +const computerUseAPIName = "computer" + +// ComputerUseToolVersion identifies which version of the Anthropic +// computer use tool to use. +type ComputerUseToolVersion string + +const ( + // ComputerUse20251124 selects the November 2025 version of the + // computer use tool. + ComputerUse20251124 ComputerUseToolVersion = "computer_20251124" + // ComputerUse20250124 selects the January 2025 version of the + // computer use tool. + ComputerUse20250124 ComputerUseToolVersion = "computer_20250124" +) + +// ComputerUseToolOptions holds the configuration for creating a +// computer use tool instance. +type ComputerUseToolOptions struct { + // DisplayWidthPx is the width of the display in pixels. + DisplayWidthPx int64 + // DisplayHeightPx is the height of the display in pixels. + DisplayHeightPx int64 + // DisplayNumber is an optional X11 display number. + DisplayNumber *int64 + // EnableZoom enables zoom support. Only used with the + // ComputerUse20251124 version. + EnableZoom *bool + // ToolVersion selects which computer use tool version to use. + ToolVersion ComputerUseToolVersion + // CacheControl sets optional cache control for the tool. + CacheControl *CacheControl +} + +// NewComputerUseTool creates a new provider-defined tool configured +// for Anthropic computer use. The returned tool can be passed +// directly into a fantasy tool set via WithProviderDefinedTools. +func NewComputerUseTool( + opts ComputerUseToolOptions, + run func(ctx context.Context, call fantasy.ToolCall) (fantasy.ToolResponse, error), +) fantasy.ExecutableProviderTool { + args := map[string]any{ + "display_width_px": opts.DisplayWidthPx, + "display_height_px": opts.DisplayHeightPx, + "tool_version": string(opts.ToolVersion), + } + if opts.DisplayNumber != nil { + args["display_number"] = *opts.DisplayNumber + } + if opts.EnableZoom != nil { + args["enable_zoom"] = *opts.EnableZoom + } + if opts.CacheControl != nil { + args["cache_control"] = *opts.CacheControl + } + pdt := fantasy.ProviderDefinedTool{ + ID: computerUseToolID, + Name: computerUseAPIName, + Args: args, + } + return fantasy.NewExecutableProviderTool(pdt, run) +} + +// IsComputerUseTool reports whether tool is an Anthropic computer +// use tool. It checks for a ProviderDefinedTool whose ID matches +// the computer use tool identifier exactly. +func IsComputerUseTool(tool fantasy.Tool) bool { + pdt, ok := asProviderDefinedTool(tool) + if !ok { + return false + } + return pdt.ID == computerUseToolID +} + +// getComputerUseVersion extracts the ComputerUseToolVersion from a +// provider-defined tool's Args map. It returns the version and true +// if present, or the zero value and false otherwise. +func getComputerUseVersion(tool fantasy.ProviderDefinedTool) (ComputerUseToolVersion, bool) { + v, ok := tool.Args["tool_version"] + if !ok { + return "", false + } + s, ok := v.(string) + if !ok { + return "", false + } + return ComputerUseToolVersion(s), true +} + +// computerUseBetaFlag returns the Anthropic beta header value for +// the given computer use tool version. +func computerUseBetaFlag(version ComputerUseToolVersion) (string, error) { + switch version { + case ComputerUse20251124: + // TODO: Replace with SDK constant when available. + return "computer-use-2025-11-24", nil + case ComputerUse20250124: + return anthropicsdk.AnthropicBetaComputerUse2025_01_24, nil + default: + return "", fmt.Errorf( + "unsupported computer use tool version: %q", version, + ) + } +} + +// computerUseToolJSON builds the JSON representation of a computer +// use tool from a ProviderDefinedTool's Args, using the beta SDK +// types for serialization. +func computerUseToolJSON(pdt fantasy.ProviderDefinedTool) (json.RawMessage, error) { + version, ok := getComputerUseVersion(pdt) + if !ok { + return nil, fmt.Errorf("computerUseToolJSON: tool_version arg is missing") + } + + h, hOK := anyToInt64(pdt.Args["display_height_px"]) + w, wOK := anyToInt64(pdt.Args["display_width_px"]) + if !hOK || !wOK { + return nil, fmt.Errorf( + "display_height_px and display_width_px must be numeric"+ + " (height ok=%t, width ok=%t)", hOK, wOK, + ) + } + + switch version { + case ComputerUse20250124: + tool := anthropicsdk.BetaToolUnionParamOfComputerUseTool20250124(h, w) + if v, ok := pdt.Args["display_number"]; ok { + dn, ok := anyToInt64(v) + if !ok { + return nil, fmt.Errorf("computer use tool has invalid display_number") + } + tool.OfComputerUseTool20250124.DisplayNumber = param.NewOpt(dn) + } + if _, ok := pdt.Args["cache_control"]; ok { + tool.OfComputerUseTool20250124.CacheControl = anthropicsdk.NewBetaCacheControlEphemeralParam() + } + return json.Marshal(tool) + case ComputerUse20251124: + tool := anthropicsdk.BetaToolUnionParamOfComputerUseTool20251124(h, w) + if v, ok := pdt.Args["display_number"]; ok { + dn, ok := anyToInt64(v) + if !ok { + return nil, fmt.Errorf("computer use tool has invalid display_number") + } + tool.OfComputerUseTool20251124.DisplayNumber = param.NewOpt(dn) + } + if v, ok := pdt.Args["enable_zoom"]; ok { + if b, ok := v.(bool); ok { + tool.OfComputerUseTool20251124.EnableZoom = param.NewOpt(b) + } + } + if _, ok := pdt.Args["cache_control"]; ok { + tool.OfComputerUseTool20251124.CacheControl = anthropicsdk.NewBetaCacheControlEphemeralParam() + } + return json.Marshal(tool) + default: + return nil, fmt.Errorf( + "unsupported computer use tool version: %q", version, + ) + } +} + +// ComputerAction identifies the action Claude wants to perform. +// +// Unless noted otherwise on a specific action, respond by returning a +// screenshot using NewComputerUseScreenshotResult. +type ComputerAction string + +const ( + // ActionScreenshot captures the current screen. + // + // No additional fields are populated. + ActionScreenshot ComputerAction = "screenshot" + // ActionLeftClick performs a left click. + // + // - Coordinate: [x, y] target. + // - Text: optional modifier key (e.g. "shift", "ctrl"). + ActionLeftClick ComputerAction = "left_click" + // ActionRightClick performs a right click (v20250124+). + // + // - Coordinate: [x, y] target. + // - Text: optional modifier key (e.g. "shift", "ctrl"). + ActionRightClick ComputerAction = "right_click" + // ActionDoubleClick performs a double click (v20250124+). + // + // - Coordinate: [x, y] target. + // - Text: optional modifier key (e.g. "shift", "ctrl"). + ActionDoubleClick ComputerAction = "double_click" + // ActionTripleClick performs a triple click (v20250124+). + // + // - Coordinate: [x, y] target. + // - Text: optional modifier key (e.g. "shift", "ctrl"). + ActionTripleClick ComputerAction = "triple_click" + // ActionMiddleClick performs a middle click (v20250124+). + // + // - Coordinate: [x, y] target. + // - Text: optional modifier key (e.g. "shift", "ctrl"). + ActionMiddleClick ComputerAction = "middle_click" + // ActionMouseMove moves the cursor. + // + // - Coordinate: [x, y] destination. + ActionMouseMove ComputerAction = "mouse_move" + // ActionLeftClickDrag drags from one point to another + // (v20250124+). + // + // - StartCoordinate: [x, y] drag origin. + // - Coordinate: [x, y] drag destination. + ActionLeftClickDrag ComputerAction = "left_click_drag" + // ActionType types text. + // + // - Text: the string to type. + ActionType ComputerAction = "type" + // ActionKey presses a key combination. + // + // - Text: key combo string (e.g. "ctrl+c", "Return"). + ActionKey ComputerAction = "key" + // ActionScroll scrolls the screen (v20250124+). + // + // - Coordinate: [x, y] scroll origin. + // - ScrollDirection: "up", "down", "left", or "right". + // - ScrollAmount: scroll distance. + // - Text: optional modifier key. + ActionScroll ComputerAction = "scroll" + // ActionLeftMouseDown presses and holds the left mouse button + // (v20250124+). + // + // - Coordinate: [x, y] target. + ActionLeftMouseDown ComputerAction = "left_mouse_down" + // ActionLeftMouseUp releases the left mouse button + // (v20250124+). + // + // - Coordinate: [x, y] target. + ActionLeftMouseUp ComputerAction = "left_mouse_up" + // ActionHoldKey holds down a key for a specified duration + // (v20250124+). + // + // - Text: the key to hold. + // - Duration: hold time in seconds. + ActionHoldKey ComputerAction = "hold_key" + // ActionWait pauses between actions (v20250124+). + // + // No additional fields are populated. + ActionWait ComputerAction = "wait" + // ActionZoom views a specific screen region at full + // resolution (v20251124 only). Requires enable_zoom in the + // tool definition. + // + // - Region: [x1, y1, x2, y2] top-left and bottom-right. + // + // Response: return a screenshot of the zoomed region at + // full resolution. + ActionZoom ComputerAction = "zoom" +) + +// ComputerUseInput is the parsed, typed representation of a computer +// use tool call's Input JSON. Not all fields are populated for every +// action — check Action first, then read the relevant fields. +type ComputerUseInput struct { + Action ComputerAction `json:"action"` + // Coordinate is [x, y] for click, move, scroll, and + // drag-end actions. + Coordinate [2]int64 `json:"coordinate,omitempty"` + // StartCoordinate is [x, y] for left_click_drag start point. + StartCoordinate [2]int64 `json:"start_coordinate,omitempty"` + // Text is the string to type (ActionType), key combo + // (ActionKey), modifier key for click/scroll actions, or key + // to hold (ActionHoldKey). + Text string `json:"text,omitempty"` + // ScrollDirection is the scroll direction: "up", "down", + // "left", or "right". + ScrollDirection string `json:"scroll_direction,omitempty"` + // ScrollAmount is the number of scroll clicks. + ScrollAmount int64 `json:"scroll_amount,omitempty"` + // Duration is how long to hold the key in seconds + // (ActionHoldKey). + Duration int64 `json:"duration,omitempty"` + // Region is [x1, y1, x2, y2] defining the zoom area + // (ActionZoom, v20251124 only). + Region [4]int64 `json:"region,omitempty"` +} + +// ParseComputerUseInput parses a ToolCallContent's Input string into +// a typed ComputerUseInput. Returns an error if the JSON is invalid +// or if coordinate arrays have the wrong number of elements. +func ParseComputerUseInput(input string) (ComputerUseInput, error) { + var result ComputerUseInput + if err := json.Unmarshal([]byte(input), &result); err != nil { + return result, err + } + + // Validate array field lengths. json.Unmarshal silently pads + // or truncates arrays that don't match the Go fixed-size type, + // which would produce wrong coordinates. + var raw map[string]json.RawMessage + if err := json.Unmarshal([]byte(input), &raw); err != nil { + return result, err + } + if err := validateArrayLen(raw, "coordinate", 2); err != nil { + return ComputerUseInput{}, err + } + if err := validateArrayLen(raw, "start_coordinate", 2); err != nil { + return ComputerUseInput{}, err + } + if err := validateArrayLen(raw, "region", 4); err != nil { + return ComputerUseInput{}, err + } + + return result, nil +} + +// validateArrayLen checks that the JSON array at key has exactly +// wantLen elements. If the key is absent from raw it returns nil. +func validateArrayLen(raw map[string]json.RawMessage, key string, wantLen int) error { + v, ok := raw[key] + if !ok { + return nil + } + var elems []json.RawMessage + if err := json.Unmarshal(v, &elems); err != nil { + return fmt.Errorf("%s: expected array: %w", key, err) + } + if len(elems) != wantLen { + return fmt.Errorf( + "%s: expected %d elements, got %d", + key, wantLen, len(elems), + ) + } + return nil +} + +// NewComputerUseScreenshotResult constructs a ToolResultPart +// containing a screenshot image. This is the standard response for +// almost every computer use action — Claude expects to see what +// happened after executing the action. +// +// Parameters: +// - toolCallID: the ToolCallID from the ToolCallContent that +// requested this action. +// - screenshotPNG: the raw PNG bytes of the screenshot. The +// caller is responsible for capturing and (optionally) resizing +// the screenshot before passing it here. +// +// The function base64-encodes the image data and sets the media +// type to "image/png". +func NewComputerUseScreenshotResult( + toolCallID string, + screenshotPNG []byte, +) fantasy.ToolResultPart { + return fantasy.ToolResultPart{ + ToolCallID: toolCallID, + Output: fantasy.ToolResultOutputContentMedia{ + Data: base64.StdEncoding.EncodeToString(screenshotPNG), + MediaType: "image/png", + }, + } +} + +// NewComputerUseScreenshotResultWithMediaType is like +// NewComputerUseScreenshotResult but allows specifying a custom +// media type (e.g. "image/jpeg") and pre-encoded base64 data. +func NewComputerUseScreenshotResultWithMediaType( + toolCallID string, + base64Data string, + mediaType string, +) fantasy.ToolResultPart { + return fantasy.ToolResultPart{ + ToolCallID: toolCallID, + Output: fantasy.ToolResultOutputContentMedia{ + Data: base64Data, + MediaType: mediaType, + }, + } +} + +// NewComputerUseErrorResult constructs a ToolResultPart indicating +// that the requested action failed. Claude will see this as an +// error and may retry or adjust its approach. +// +// Use this when screenshot capture fails, coordinates are out of +// bounds, the application is unresponsive, or any other execution +// error occurs. +func NewComputerUseErrorResult( + toolCallID string, + err error, +) fantasy.ToolResultPart { + return fantasy.ToolResultPart{ + ToolCallID: toolCallID, + Output: fantasy.ToolResultOutputContentError{ + Error: err, + }, + } +} + +// NewComputerUseTextResult constructs a ToolResultPart containing a +// plain text response. This is rarely needed for computer use — +// most actions should return a screenshot — but can be useful for +// returning metadata alongside the action or for testing. +func NewComputerUseTextResult( + toolCallID string, + text string, +) fantasy.ToolResultPart { + return fantasy.ToolResultPart{ + ToolCallID: toolCallID, + Output: fantasy.ToolResultOutputContentText{ + Text: text, + }, + } +} diff --git a/providers/anthropic/computer_use_test.go b/providers/anthropic/computer_use_test.go new file mode 100644 index 000000000..6278327a1 --- /dev/null +++ b/providers/anthropic/computer_use_test.go @@ -0,0 +1,303 @@ +package anthropic + +import ( + "encoding/base64" + "errors" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +func TestParseComputerUseInput(t *testing.T) { + t.Parallel() + + t.Run("screenshot", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"screenshot"}`) + require.NoError(t, err) + require.Equal(t, ActionScreenshot, input.Action) + require.Equal(t, [2]int64{0, 0}, input.Coordinate) + require.Equal(t, "", input.Text) + }) + + t.Run("left_click with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"left_click","coordinate":[100,200]}`) + require.NoError(t, err) + require.Equal(t, ActionLeftClick, input.Action) + require.Equal(t, [2]int64{100, 200}, input.Coordinate) + }) + + t.Run("right_click with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"right_click","coordinate":[50,75]}`) + require.NoError(t, err) + require.Equal(t, ActionRightClick, input.Action) + require.Equal(t, [2]int64{50, 75}, input.Coordinate) + }) + + t.Run("double_click with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"double_click","coordinate":[300,400]}`) + require.NoError(t, err) + require.Equal(t, ActionDoubleClick, input.Action) + require.Equal(t, [2]int64{300, 400}, input.Coordinate) + }) + + t.Run("middle_click with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"middle_click","coordinate":[10,20]}`) + require.NoError(t, err) + require.Equal(t, ActionMiddleClick, input.Action) + require.Equal(t, [2]int64{10, 20}, input.Coordinate) + }) + + t.Run("mouse_move with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"mouse_move","coordinate":[500,600]}`) + require.NoError(t, err) + require.Equal(t, ActionMouseMove, input.Action) + require.Equal(t, [2]int64{500, 600}, input.Coordinate) + }) + + t.Run("left_click_drag with start_coordinate and coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"left_click_drag","start_coordinate":[10,20],"coordinate":[300,400]}`) + require.NoError(t, err) + require.Equal(t, ActionLeftClickDrag, input.Action) + require.Equal(t, [2]int64{10, 20}, input.StartCoordinate) + require.Equal(t, [2]int64{300, 400}, input.Coordinate) + }) + + t.Run("type with text", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"type","text":"hello world"}`) + require.NoError(t, err) + require.Equal(t, ActionType, input.Action) + require.Equal(t, "hello world", input.Text) + }) + + t.Run("key with text", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"key","text":"ctrl+c"}`) + require.NoError(t, err) + require.Equal(t, ActionKey, input.Action) + require.Equal(t, "ctrl+c", input.Text) + }) + + t.Run("scroll with coordinate direction and amount", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"scroll","coordinate":[960,540],"scroll_direction":"down","scroll_amount":3}`) + require.NoError(t, err) + require.Equal(t, ActionScroll, input.Action) + require.Equal(t, [2]int64{960, 540}, input.Coordinate) + require.Equal(t, "down", input.ScrollDirection) + require.Equal(t, int64(3), input.ScrollAmount) + }) + + t.Run("invalid JSON returns error", func(t *testing.T) { + t.Parallel() + _, err := ParseComputerUseInput(`{not valid json}`) + require.Error(t, err) + }) + + t.Run("triple_click with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"triple_click","coordinate":[120,240]}`) + require.NoError(t, err) + require.Equal(t, ActionTripleClick, input.Action) + require.Equal(t, [2]int64{120, 240}, input.Coordinate) + }) + + t.Run("left_mouse_down with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"left_mouse_down","coordinate":[80,90]}`) + require.NoError(t, err) + require.Equal(t, ActionLeftMouseDown, input.Action) + require.Equal(t, [2]int64{80, 90}, input.Coordinate) + }) + + t.Run("left_mouse_up with coordinate", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"left_mouse_up","coordinate":[80,90]}`) + require.NoError(t, err) + require.Equal(t, ActionLeftMouseUp, input.Action) + require.Equal(t, [2]int64{80, 90}, input.Coordinate) + }) + + t.Run("wait", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"wait"}`) + require.NoError(t, err) + require.Equal(t, ActionWait, input.Action) + require.Equal(t, [2]int64{0, 0}, input.Coordinate) + require.Equal(t, "", input.Text) + }) + + t.Run("zoom with region", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"zoom","region":[100,200,500,600]}`) + require.NoError(t, err) + require.Equal(t, ActionZoom, input.Action) + require.Equal(t, [4]int64{100, 200, 500, 600}, input.Region) + }) + + t.Run("left_click with modifier key", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"left_click","coordinate":[100,200],"text":"shift"}`) + require.NoError(t, err) + require.Equal(t, ActionLeftClick, input.Action) + require.Equal(t, [2]int64{100, 200}, input.Coordinate) + require.Equal(t, "shift", input.Text) + }) + + t.Run("unknown action parses without error", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"future_action","coordinate":[1,2]}`) + require.NoError(t, err) + require.Equal(t, ComputerAction("future_action"), input.Action) + require.Equal(t, [2]int64{1, 2}, input.Coordinate) + }) + + t.Run("hold_key with duration", func(t *testing.T) { + t.Parallel() + input, err := ParseComputerUseInput(`{"action":"hold_key","text":"shift","duration":2}`) + require.NoError(t, err) + require.Equal(t, ActionHoldKey, input.Action) + require.Equal(t, "shift", input.Text) + require.Equal(t, int64(2), input.Duration) + }) +} + +func TestNewComputerUseScreenshotResult(t *testing.T) { + t.Parallel() + + t.Run("base64 encodes PNG bytes", func(t *testing.T) { + t.Parallel() + pngData := []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A} + result := NewComputerUseScreenshotResult("call-123", pngData) + + require.Equal(t, "call-123", result.ToolCallID) + + media, ok := result.Output.(fantasy.ToolResultOutputContentMedia) + require.True(t, ok, "output should be ToolResultOutputContentMedia") + require.Equal(t, "image/png", media.MediaType) + require.Equal(t, base64.StdEncoding.EncodeToString(pngData), media.Data) + }) + + t.Run("preserves tool call ID", func(t *testing.T) { + t.Parallel() + result := NewComputerUseScreenshotResult("tc_abc", []byte{0x01}) + require.Equal(t, "tc_abc", result.ToolCallID) + }) + + t.Run("empty screenshot bytes", func(t *testing.T) { + t.Parallel() + result := NewComputerUseScreenshotResult("call-empty", []byte{}) + + media, ok := result.Output.(fantasy.ToolResultOutputContentMedia) + require.True(t, ok) + require.Equal(t, "image/png", media.MediaType) + require.Equal(t, "", media.Data) + }) + + t.Run("output content type is media", func(t *testing.T) { + t.Parallel() + result := NewComputerUseScreenshotResult("call-type", []byte{0xFF}) + require.Equal(t, fantasy.ToolResultContentTypeMedia, result.Output.GetType()) + }) +} + +func TestNewComputerUseScreenshotResultWithMediaType(t *testing.T) { + t.Parallel() + + t.Run("custom media type and base64 data", func(t *testing.T) { + t.Parallel() + b64 := base64.StdEncoding.EncodeToString([]byte("jpeg-data")) + result := NewComputerUseScreenshotResultWithMediaType("call-456", b64, "image/jpeg") + + require.Equal(t, "call-456", result.ToolCallID) + + media, ok := result.Output.(fantasy.ToolResultOutputContentMedia) + require.True(t, ok, "output should be ToolResultOutputContentMedia") + require.Equal(t, "image/jpeg", media.MediaType) + require.Equal(t, b64, media.Data) + }) + + t.Run("preserves tool call ID", func(t *testing.T) { + t.Parallel() + result := NewComputerUseScreenshotResultWithMediaType("tc_xyz", "data", "image/webp") + require.Equal(t, "tc_xyz", result.ToolCallID) + }) + + t.Run("output content type is media", func(t *testing.T) { + t.Parallel() + result := NewComputerUseScreenshotResultWithMediaType("call-type", "data", "image/png") + require.Equal(t, fantasy.ToolResultContentTypeMedia, result.Output.GetType()) + }) +} + +func TestNewComputerUseErrorResult(t *testing.T) { + t.Parallel() + + t.Run("error message propagates", func(t *testing.T) { + t.Parallel() + err := errors.New("screenshot capture failed") + result := NewComputerUseErrorResult("call-err", err) + + require.Equal(t, "call-err", result.ToolCallID) + + errOutput, ok := result.Output.(fantasy.ToolResultOutputContentError) + require.True(t, ok, "output should be ToolResultOutputContentError") + require.Equal(t, "screenshot capture failed", errOutput.Error.Error()) + }) + + t.Run("preserves tool call ID", func(t *testing.T) { + t.Parallel() + result := NewComputerUseErrorResult("tc_err", errors.New("fail")) + require.Equal(t, "tc_err", result.ToolCallID) + }) + + t.Run("output content type is error", func(t *testing.T) { + t.Parallel() + result := NewComputerUseErrorResult("call-type", errors.New("oops")) + require.Equal(t, fantasy.ToolResultContentTypeError, result.Output.GetType()) + }) +} + +func TestNewComputerUseTextResult(t *testing.T) { + t.Parallel() + + t.Run("text content is set", func(t *testing.T) { + t.Parallel() + result := NewComputerUseTextResult("call-txt", "action completed successfully") + + require.Equal(t, "call-txt", result.ToolCallID) + + textOutput, ok := result.Output.(fantasy.ToolResultOutputContentText) + require.True(t, ok, "output should be ToolResultOutputContentText") + require.Equal(t, "action completed successfully", textOutput.Text) + }) + + t.Run("preserves tool call ID", func(t *testing.T) { + t.Parallel() + result := NewComputerUseTextResult("tc_text", "hello") + require.Equal(t, "tc_text", result.ToolCallID) + }) + + t.Run("empty text", func(t *testing.T) { + t.Parallel() + result := NewComputerUseTextResult("call-empty", "") + + textOutput, ok := result.Output.(fantasy.ToolResultOutputContentText) + require.True(t, ok) + require.Equal(t, "", textOutput.Text) + }) + + t.Run("output content type is text", func(t *testing.T) { + t.Parallel() + result := NewComputerUseTextResult("call-type", "test") + require.Equal(t, fantasy.ToolResultContentTypeText, result.Output.GetType()) + }) +} diff --git a/providertests/anthropic_test.go b/providertests/anthropic_test.go index 32fb87f70..940ec477d 100644 --- a/providertests/anthropic_test.go +++ b/providertests/anthropic_test.go @@ -2,6 +2,7 @@ package providertests import ( "context" + "encoding/json" "net/http" "os" "testing" @@ -274,3 +275,187 @@ func TestAnthropicWebSearch(t *testing.T) { require.Contains(t, got2, "Osaka", "turn 2 response should mention Osaka") }) } + +// screenshotBase64 is a tiny valid 1x1 PNG encoded as base64, +// used as a stub screenshot result in computer use tests. +const screenshotBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==" + +func TestAnthropicComputerUse(t *testing.T) { + type computerUseModel struct { + name string + model string + toolVersion anthropic.ComputerUseToolVersion + } + computerUseModels := []computerUseModel{ + {"claude-sonnet-4", "claude-sonnet-4-20250514", anthropic.ComputerUse20250124}, + {"claude-opus-4-6", "claude-opus-4-6", anthropic.ComputerUse20251124}, + } + for _, m := range computerUseModels { + t.Run(m.name, func(t *testing.T) { + t.Run("computer use", func(t *testing.T) { + r := vcr.NewRecorder(t) + + model, err := anthropicBuilder(m.model)(t, r) + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, anthropic.NewComputerUseTool(anthropic.ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: m.toolVersion, + }, noopComputerRun)) + + // First call: expect a screenshot tool call. + resp, err := model.Generate(t.Context(), fantasy.Call{ + Prompt: fantasy.Prompt{ + {Role: fantasy.MessageRoleSystem, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "You are a helpful assistant"}}}, + {Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "Take a screenshot of the desktop"}}}, + }, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + require.Equal(t, fantasy.FinishReasonToolCalls, resp.FinishReason) + + toolCalls := resp.Content.ToolCalls() + require.Len(t, toolCalls, 1) + require.Equal(t, "computer", toolCalls[0].ToolName) + require.Contains(t, toolCalls[0].Input, "screenshot") + + // Second call: send the tool result back, expect text. + resp2, err := model.Generate(t.Context(), fantasy.Call{ + Prompt: fantasy.Prompt{ + {Role: fantasy.MessageRoleSystem, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "You are a helpful assistant"}}}, + {Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "Take a screenshot of the desktop"}}}, + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: toolCalls[0].ToolCallID, + ToolName: toolCalls[0].ToolName, + Input: toolCalls[0].Input, + }, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: toolCalls[0].ToolCallID, + Output: fantasy.ToolResultOutputContentMedia{ + Data: screenshotBase64, + MediaType: "image/png", + }, + }, + }, + }, + }, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + require.NotEmpty(t, resp2.Content.Text()) + require.Contains(t, resp2.Content.Text(), "desktop") + }) + + t.Run("computer use streaming", func(t *testing.T) { + r := vcr.NewRecorder(t) + + model, err := anthropicBuilder(m.model)(t, r) + require.NoError(t, err) + + cuTool := jsonRoundTripTool(t, anthropic.NewComputerUseTool(anthropic.ComputerUseToolOptions{ + DisplayWidthPx: 1920, + DisplayHeightPx: 1080, + ToolVersion: m.toolVersion, + }, noopComputerRun)) + + // First call: stream, collect tool call. + stream, err := model.Stream(t.Context(), fantasy.Call{ + Prompt: fantasy.Prompt{ + {Role: fantasy.MessageRoleSystem, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "You are a helpful assistant"}}}, + {Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "Take a screenshot of the desktop"}}}, + }, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + + var toolCallID, toolCallName, toolCallInput string + var finishReason fantasy.FinishReason + stream(func(part fantasy.StreamPart) bool { + switch part.Type { + case fantasy.StreamPartTypeToolCall: + toolCallID = part.ID + toolCallName = part.ToolCallName + toolCallInput = part.ToolCallInput + case fantasy.StreamPartTypeFinish: + finishReason = part.FinishReason + } + return true + }) + + require.Equal(t, fantasy.FinishReasonToolCalls, finishReason) + require.Equal(t, "computer", toolCallName) + require.Contains(t, toolCallInput, "screenshot") + + // Second call: send tool result, stream text back. + stream2, err := model.Stream(t.Context(), fantasy.Call{ + Prompt: fantasy.Prompt{ + {Role: fantasy.MessageRoleSystem, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "You are a helpful assistant"}}}, + {Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{fantasy.TextPart{Text: "Take a screenshot of the desktop"}}}, + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: toolCallID, + ToolName: toolCallName, + Input: toolCallInput, + }, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: toolCallID, + Output: fantasy.ToolResultOutputContentMedia{ + Data: screenshotBase64, + MediaType: "image/png", + }, + }, + }, + }, + }, + Tools: []fantasy.Tool{cuTool}, + }) + require.NoError(t, err) + + var text string + stream2(func(part fantasy.StreamPart) bool { + if part.Type == fantasy.StreamPartTypeTextDelta { + text += part.Delta + } + return true + }) + require.NotEmpty(t, text) + require.Contains(t, text, "desktop") + }) + }) + } +} + +// noopComputerRun is a no-op run function for tests that only need +// to inspect the tool definition, not execute it. +var noopComputerRun = func(_ context.Context, _ fantasy.ToolCall) (fantasy.ToolResponse, error) { + return fantasy.ToolResponse{}, nil +} + +// jsonRoundTripTool simulates a JSON round-trip on a ProviderDefinedTool +// so numeric values become float64 as they would in real usage. +func jsonRoundTripTool(t *testing.T, tool fantasy.ExecutableProviderTool) fantasy.ProviderDefinedTool { + t.Helper() + pdt := tool.Definition() + data, err := json.Marshal(pdt.Args) + require.NoError(t, err) + var args map[string]any + require.NoError(t, json.Unmarshal(data, &args)) + pdt.Args = args + return pdt +} diff --git a/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use.yaml b/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use.yaml new file mode 100644 index 000000000..5ef9521a9 --- /dev/null +++ b/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use.yaml @@ -0,0 +1,69 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 314 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"}],"model":"claude-opus-4-6","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20251124"}]}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: '{"model":"claude-opus-4-6","id":"msg_01KbvEPdNineiBzobWvpf838","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017ZcKCSBfPgLF2MstqzLwS6","name":"computer","input":{"action":"screenshot"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":1842,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":52,"service_tier":"standard","inference_geo":"global"}}' + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.904585799s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 740 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"},{"content":[{"id":"toolu_017ZcKCSBfPgLF2MstqzLwS6","input":{"action":"screenshot"},"name":"computer","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_017ZcKCSBfPgLF2MstqzLwS6","content":[{"source":{"data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==","media_type":"image/png","type":"base64"},"type":"image"}],"type":"tool_result"}],"role":"user"}],"model":"claude-opus-4-6","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20251124"}]}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: '{"model":"claude-opus-4-6","id":"msg_01LNnzU2u6f7Gb7QsSWZFMqV","type":"message","role":"assistant","content":[{"type":"text","text":"The screenshot shows what appears to be a mostly blank/yellow desktop. The screen appears to be largely empty with a light yellow or pale background. There don''t seem to be any visible icons, taskbar, or other desktop elements in this view.\n\nWould you like me to try anything else, such as moving the mouse or clicking to see if there are hidden elements?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":1921,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":78,"service_tier":"standard","inference_geo":"global"}}' + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 4.691481122s diff --git a/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use_streaming.yaml b/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use_streaming.yaml new file mode 100644 index 000000000..e0d843885 --- /dev/null +++ b/providertests/testdata/TestAnthropicComputerUse/claude-opus-4-6/computer_use_streaming.yaml @@ -0,0 +1,132 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 328 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"}],"model":"claude-opus-4-6","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20251124"}],"stream":true}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: |+ + event: message_start + data: {"type":"message_start","message":{"model":"claude-opus-4-6","id":"msg_01H5UdVXFCVHyBS6MXSCVkKa","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1842,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":52,"service_tier":"standard","inference_geo":"global"}} } + + event: content_block_start + data: {"type":"content_block_start","index":0,"content_block":{"type":"tool_use","id":"toolu_01DkSrnHZMNWNEqf7wznra4W","name":"computer","input":{},"caller":{"type":"direct"}} } + + event: ping + data: {"type": "ping"} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"input_json_delta","partial_json":""} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"input_json_delta","partial_json":"{\"action\""} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"input_json_delta","partial_json":": \"screens"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"input_json_delta","partial_json":"hot\"}"} } + + event: content_block_stop + data: {"type":"content_block_stop","index":0 } + + event: message_delta + data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"input_tokens":1842,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":52} } + + event: message_stop + data: {"type":"message_stop" } + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 2.80446445s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 754 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"},{"content":[{"id":"toolu_01DkSrnHZMNWNEqf7wznra4W","input":{"action":"screenshot"},"name":"computer","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_01DkSrnHZMNWNEqf7wznra4W","content":[{"source":{"data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==","media_type":"image/png","type":"base64"},"type":"image"}],"type":"tool_result"}],"role":"user"}],"model":"claude-opus-4-6","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20251124"}],"stream":true}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: |+ + event: message_start + data: {"type":"message_start","message":{"model":"claude-opus-4-6","id":"msg_01BRaGURK3eQELbeoU9DM6Bb","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1921,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"global"}} } + + event: content_block_start + data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + + event: ping + data: {"type": "ping"} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"The"}} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" screenshot shows the desktop. It appears to be a mostly blank/empty desktop with a"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" yellow or light-colored background. There don't appear to be any visible icons, taskb"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"ars, or open windows at the moment. \n\nIs there anything specific you'd like me to do on the"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" desktop?"} } + + event: content_block_stop + data: {"type":"content_block_stop","index":0 } + + event: message_delta + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1921,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":65} } + + event: message_stop + data: {"type":"message_stop" } + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 3.163032433s diff --git a/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use.yaml b/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use.yaml new file mode 100644 index 000000000..03a612892 --- /dev/null +++ b/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use.yaml @@ -0,0 +1,69 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 323 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"}],"model":"claude-sonnet-4-20250514","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20250124"}]}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: '{"model":"claude-sonnet-4-20250514","id":"msg_01KHX677vLGXfeouAejAbGDD","type":"message","role":"assistant","content":[{"type":"text","text":"I''ll take a screenshot of the desktop for you."},{"type":"tool_use","id":"toolu_01MpnnLwjqpqYWLUQ5F5SixE","name":"computer","input":{"action":"screenshot"},"caller":{"type":"direct"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":1652,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":63,"service_tier":"standard","inference_geo":"not_available"}}' + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 1.45399283s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 749 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"},{"content":[{"id":"toolu_01MpnnLwjqpqYWLUQ5F5SixE","input":{"action":"screenshot"},"name":"computer","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_01MpnnLwjqpqYWLUQ5F5SixE","content":[{"source":{"data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==","media_type":"image/png","type":"base64"},"type":"image"}],"type":"tool_result"}],"role":"user"}],"model":"claude-sonnet-4-20250514","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20250124"}]}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: '{"model":"claude-sonnet-4-20250514","id":"msg_01Ute4pN6TgBst3zEx6h8nF4","type":"message","role":"assistant","content":[{"type":"text","text":"I''ve taken a screenshot of the desktop. The image shows a plain black desktop background without any visible icons, taskbar, or other desktop elements. This appears to be a minimal desktop environment. Is there anything specific you''d like me to do with the desktop or any applications you''d like me to open?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":1731,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"}}' + headers: + Content-Type: + - application/json + status: 200 OK + code: 200 + duration: 2.613302152s diff --git a/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use_streaming.yaml b/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use_streaming.yaml new file mode 100644 index 000000000..a22b53422 --- /dev/null +++ b/providertests/testdata/TestAnthropicComputerUse/claude-sonnet-4/computer_use_streaming.yaml @@ -0,0 +1,144 @@ +--- +version: 2 +interactions: +- id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 337 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"}],"model":"claude-sonnet-4-20250514","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20250124"}],"stream":true}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: |+ + event: message_start + data: {"type":"message_start","message":{"model":"claude-sonnet-4-20250514","id":"msg_019NrbUUum1q7ooQRs42Rzrz","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1652,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"}} } + + event: content_block_start + data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + + event: ping + data: {"type": "ping"} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll take a screenshot of the desktop"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" for you."} } + + event: content_block_stop + data: {"type":"content_block_stop","index":0 } + + event: content_block_start + data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01Y1QGhTQnPURqMEtY7RnsP1","name":"computer","input":{},"caller":{"type":"direct"}} } + + event: content_block_delta + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""} } + + event: content_block_delta + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"actio"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"n\": \"scree"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"nshot\"}"} } + + event: content_block_stop + data: {"type":"content_block_stop","index":1 } + + event: message_delta + data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"input_tokens":1652,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":63} } + + event: message_stop + data: {"type":"message_stop" } + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 1.328724866s +- id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 763 + host: "" + body: '{"max_tokens":4096,"messages":[{"content":[{"text":"Take a screenshot of the desktop","type":"text"}],"role":"user"},{"content":[{"id":"toolu_01Y1QGhTQnPURqMEtY7RnsP1","input":{"action":"screenshot"},"name":"computer","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_01Y1QGhTQnPURqMEtY7RnsP1","content":[{"source":{"data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==","media_type":"image/png","type":"base64"},"type":"image"}],"type":"tool_result"}],"role":"user"}],"model":"claude-sonnet-4-20250514","system":[{"text":"You are a helpful assistant","type":"text"}],"tools":[{"display_height_px":1080,"display_width_px":1920,"name":"computer","type":"computer_20250124"}],"stream":true}' + form: + beta: + - "true" + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Charm-Fantasy/0.16.0 (https://charm.land/fantasy) + url: https://api.anthropic.com/v1/messages?beta=true + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: |+ + event: message_start + data: {"type":"message_start","message":{"model":"claude-sonnet-4-20250514","id":"msg_01R839ZFF3M6X1k8BFQiH9Go","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":1731,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"}} } + + event: content_block_start + data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + + event: ping + data: {"type": "ping"} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"'ve taken a screenshot of the desktop. The desktop appears to be mostly black/dark, which could indicate"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" either a dark desktop background or that the screen is currently displaying"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" a blank/black background. This is the current state"}} + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" of the desktop as captured."} } + + event: content_block_stop + data: {"type":"content_block_stop","index":0 } + + event: message_delta + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1731,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":54} } + + event: message_stop + data: {"type":"message_stop" } + + headers: + Content-Type: + - text/event-stream; charset=utf-8 + status: 200 OK + code: 200 + duration: 1.529686838s From 46820ff519a140f41ae26103d0841ab4b913d6f3 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 24 Mar 2026 17:41:36 -0300 Subject: [PATCH 25/32] chore(examples): go mod tidy --- examples/go.mod | 78 +++++++++++----------- examples/go.sum | 173 +++++++++++++++++++++++------------------------- 2 files changed, 121 insertions(+), 130 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index a08265370..173da9fdb 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -19,25 +19,25 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.60.0 // indirect + cloud.google.com/go/storage v1.61.3 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/ardanlabs/kronk v1.20.8 // indirect + github.com/ardanlabs/kronk v1.21.4 // indirect github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.96.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect @@ -49,6 +49,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab // indirect github.com/charmbracelet/colorprofile v0.3.2 // indirect + github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 // indirect github.com/charmbracelet/x/ansi v0.10.2 // indirect github.com/charmbracelet/x/cellbuf v0.0.14-0.20250811133356-e0c5dbe5ea4a // indirect github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 // indirect @@ -69,20 +70,20 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect - github.com/googleapis/gax-go/v2 v2.17.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.18.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.4 // indirect + github.com/hashicorp/go-getter v1.8.5 // indirect github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hybridgroup/yzma v1.10.1-0.20260224163708-1d64fab421f1 // indirect + github.com/hybridgroup/yzma v1.11.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect github.com/kaptinlin/go-i18n v0.2.12 // indirect github.com/kaptinlin/jsonpointer v0.4.17 // indirect - github.com/kaptinlin/jsonschema v0.7.5 // indirect + github.com/kaptinlin/jsonschema v0.7.6 // indirect github.com/kaptinlin/messageformat-go v0.4.18 // indirect github.com/klauspost/compress v1.18.4 // indirect github.com/lucasb-eyer/go-colorful v1.3.0 // indirect @@ -93,7 +94,6 @@ require ( github.com/muesli/cancelreader v0.2.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nikolalohinski/gonja/v2 v2.7.0 // indirect - github.com/openai/openai-go/v3 v3.28.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/prometheus/client_golang v1.23.2 // indirect @@ -110,31 +110,31 @@ require ( github.com/ulikunitz/xz v0.5.15 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.40.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect - go.opentelemetry.io/otel v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect - go.opentelemetry.io/otel/trace v1.40.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect - golang.org/x/crypto v0.48.0 // indirect - golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect - golang.org/x/net v0.51.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect + go.opentelemetry.io/otel v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.42.0 // indirect + go.opentelemetry.io/otel/sdk v1.42.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect + go.opentelemetry.io/otel/trace v1.42.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect + golang.org/x/crypto v0.49.0 // indirect + golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect + golang.org/x/net v0.52.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.41.0 // indirect - golang.org/x/text v0.34.0 // indirect - golang.org/x/time v0.14.0 // indirect - google.golang.org/api v0.269.0 // indirect - google.golang.org/genai v1.50.0 // indirect - google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/grpc v1.79.1 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/text v0.35.0 // indirect + golang.org/x/time v0.15.0 // indirect + google.golang.org/api v0.271.0 // indirect + google.golang.org/genai v1.51.0 // indirect + google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/grpc v1.79.2 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 309d7a0e1..3b5392888 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -16,8 +16,8 @@ cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7 cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= -cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= +cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= +cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= @@ -30,12 +30,12 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.20.8 h1:mwmi8extRNcDH4YbvEx+CaWuBGpedIaTtJn5J6M3JSM= -github.com/ardanlabs/kronk v1.20.8/go.mod h1:aQPdkfQzTi6eWpqXlpc0GCrRt3e96vOdl/f+7xiJAgM= +github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= +github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5 h1:zWFmPmgw4sveAYi1mRqG+E/g0461cJ5M4bJ8/nc6d3Q= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.5/go.mod h1:nVUlMLVV8ycXSb7mSkcNu9e3v/1TJq2RTlrPwhYWr5c= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= @@ -48,18 +48,18 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDk github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18 h1:eZioDaZGJ0tMM4gzmkNIO2aAoQd+je7Ug7TkvAzlmkU= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.18/go.mod h1:CCXwUKAJdoWr6/NcxZ+zsiPr6oH/Q5aTooRGYieAyj4= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10 h1:fJvQ5mIBVfKtiyx0AHY6HeWcRX5LGANLpq8SVR+Uazs= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.10/go.mod h1:Kzm5e6OmNH8VMkgK9t+ry5jEih4Y8whqs+1hrkxim1I= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18 h1:/A/xDuZAVD2BpsS2fftFRo/NoEKQJ8YTnJDEHBy2Gtg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.18/go.mod h1:hWe9b4f+djUQGmyiGEeOnZv69dtMSgpDRIvNMvuvzvY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.2 h1:M1A9AjcFwlxTLuf0Faj88L8Iqw0n/AJHjpZTQzMMsSc= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.2/go.mod h1:KsdTV6Q9WKUZm2mNJnUFmIoXfZux91M3sr/a4REX8e0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= @@ -88,6 +88,8 @@ github.com/charmbracelet/lipgloss/v2 v2.0.0-beta1 h1:SOylT6+BQzPHEjn15TIzawBPVD0 github.com/charmbracelet/lipgloss/v2 v2.0.0-beta1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc= github.com/charmbracelet/log/v2 v2.0.0-20251001162505-358b5269b546 h1:ZcOMUkKhtM6TbQKfB6C/GusIG6hdTMybJ4gNboQpjYg= github.com/charmbracelet/log/v2 v2.0.0-20251001162505-358b5269b546/go.mod h1:ooW2QKtnlCj7Kc5Atb7TQPRo699Fy+jhtLgX6a/EAh8= +github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZtyd1JyYy0h5adMm3tzpNyL857LWjuTRET6OhpY= +github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E= github.com/charmbracelet/x/ansi v0.10.2 h1:ith2ArZS0CJG30cIUfID1LXN7ZFXRCww6RUvAPA+Pzw= github.com/charmbracelet/x/ansi v0.10.2/go.mod h1:HbLdJjQH4UH4AqA2HpRWuWNluRE6zxJH/yteYEYCFa8= github.com/charmbracelet/x/cellbuf v0.0.14-0.20250811133356-e0c5dbe5ea4a h1:zYSNtEJM9jwHbJts2k+Hroj+xQwsW1yxc4Wopdv7KaI= @@ -152,24 +154,24 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= +github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 h1:0HADrxxqaQkGycO1JoUUA+B4FnIkuo8d2bz/hSaTFFQ= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70/go.mod h1:fm2FdDCzJdtbXF7WKAMvBb5NEPouXPHFbGNYs9ShFns= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1B20hUJexxqqmQ2OTs1+0s= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.4 h1:hGEd2xsuVKgwkMtPVufq73fAmZU/x65PPcqH3cb0D9A= -github.com/hashicorp/go-getter v1.8.4/go.mod h1:x27pPGSg9kzoB147QXI8d/nDvp2IgYGcwuRjpaXE9Yg= +github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= +github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.10.1-0.20260224163708-1d64fab421f1 h1:W7yvIJ/KfA2wOxIygvXt7Qq0PzIJEfV0da45wVOzOpk= -github.com/hybridgroup/yzma v1.10.1-0.20260224163708-1d64fab421f1/go.mod h1:gjqXCQrLTZgWli62IQ4bxsZA952SQh4ELTSpPbaisEg= +github.com/hybridgroup/yzma v1.11.0 h1:dIAs/GoV8imTB1fsFk1ft0ejI5APhUK6iHBSMudbfZc= +github.com/hybridgroup/yzma v1.11.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= @@ -178,16 +180,12 @@ github.com/kaptinlin/go-i18n v0.2.12 h1:ywDsvb4KDFddMC2dpI/rrIzGU2mWUSvHmWUm9BMs github.com/kaptinlin/go-i18n v0.2.12/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.5 h1:jkK4a3NyzNoGlvu12CsL3IcqNMVa5sL51HPVa0nWcPY= -github.com/kaptinlin/jsonschema v0.7.5/go.mod h1:3gIWnptl+SWMyfMR2r4TXXd0xsQZ1m50AKrwmcUONSg= +github.com/kaptinlin/jsonschema v0.7.6 h1:UUMqZGFAk7nOzQsYAxvgygm4wpDp/nwXxA4VP9mCPCs= +github.com/kaptinlin/jsonschema v0.7.6/go.mod h1:GGk/oE+F1lWUfYrzKaCf4QWZmMdytt0LL4XdFEFB0LE= github.com/kaptinlin/messageformat-go v0.4.18 h1:RBlHVWgZyoxTcUgGWBsl2AcyScq/urqbLZvzgryTmSI= github.com/kaptinlin/messageformat-go v0.4.18/go.mod h1:ntI3154RnqJgr7GaC+vZBnIExl2V3sv9selvRNNEM24= github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-runewidth v0.0.17 h1:78v8ZlW0bP43XfmAfPsdXcoNCelfMHsDmd/pkENfrjQ= @@ -209,8 +207,6 @@ github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= -github.com/openai/openai-go/v3 v3.28.0 h1:2+FfrCVMdGXSQrBv1tLWtokm+BU7+3hJ/8rAHPQ63KM= -github.com/openai/openai-go/v3 v3.28.0/go.mod h1:cdufnVK14cWcT9qA1rRtrXx4FTRsgbDPW7Ia7SS5cZo= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -231,8 +227,6 @@ github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4Ul github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= @@ -257,73 +251,70 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.40.0 h1:Awaf8gmW99tZTOWqkLCOl6aw1/rxAWVlHsHIZ3fT2sA= -go.opentelemetry.io/contrib/detectors/gcp v1.40.0/go.mod h1:99OY9ZCqyLkzJLTh5XhECpLRSxcZl+ZDKBEO+jMBFR4= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 h1:XmiuHzgJt067+a6kwyAzkhXooYVv3/TOw9cM2VfJgUM= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0/go.mod h1:KDgtbWKTQs4bM+VPUr6WlL9m/WXcmkCcBlIzqxPGzmI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= -go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.opentelemetry.io/contrib/detectors/gcp v1.42.0 h1:kpt2PEJuOuqYkPcktfJqWWDjTEd/FNgrxcniL7kQrXQ= +go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= +go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= +go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= +go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= +go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa h1:Zt3DZoOFFYkKhDT3v7Lm9FDMEV06GpzjG2jrqW+QTE0= -golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= -golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= -golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= -golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= -golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= -google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= -google.golang.org/genai v1.50.0 h1:yHKV/vjoeN9PJ3iF0ur4cBZco4N3Kl7j09rMq7XSoWk= -google.golang.org/genai v1.50.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260226221140-a57be14db171 h1:RxhCsti413yL0IjU9dVvuTbCISo8gs3RW1jPMStck+4= -google.golang.org/genproto v0.0.0-20260226221140-a57be14db171/go.mod h1:uhvzakVEqAuXU3TC2JCsxIRe5f77l+JySE3EqPoMyqM= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 h1:tu/dtnW1o3wfaxCOjSLn5IRX4YDcJrtlpzYkhHhGaC4= -google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171/go.mod h1:M5krXqk4GhBKvB596udGL3UyjL4I1+cTbK0orROM9ng= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= -google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= +google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= +google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= +google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= +google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 99e504ce84d33ee3e217496147bc487caa5bc750 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 24 Mar 2026 17:42:17 -0300 Subject: [PATCH 26/32] v0.17.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 04a373efe..c5523bd09 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.16.0 +0.17.0 From 46203291560960562ccfc341098d0564fc895e31 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Wed, 25 Mar 2026 09:14:08 -0400 Subject: [PATCH 27/32] fix(providers/openai): emit source parts for Responses API streaming annotations (#187) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Responses API streaming path was missing a handler for "response.output_text.annotation.added" events. This meant that url_citation and file_citation annotations—which carry source URLs and titles for web search results—were silently dropped during streaming. The non-streaming Generate path and the Chat Completions API streaming path both handled annotations correctly; only the Responses API Stream path was affected. Add a case for "response.output_text.annotation.added" that parses the annotation map and yields StreamPartTypeSource parts for url_citation and file_citation types, matching the behavior of the existing Generate path and the Anthropic provider. Update TestResponsesStream_WebSearchResponse to include annotation.added events in the mock stream and assert that source parts are emitted with the correct URL, title, and type. --- providers/openai/openai_test.go | 19 +++++++++- providers/openai/responses_language_model.go | 37 ++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 9cf3d4bfa..07bcdc981 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -4061,8 +4061,12 @@ func TestResponsesStream_WebSearchResponse(t *testing.T) { `data: {"type":"response.output_item.added","output_index":1,"item":{"type":"message","id":"msg_01","role":"assistant","status":"in_progress","content":[]}}` + "\n\n", "event: response.output_text.delta\n" + `data: {"type":"response.output_text.delta","output_index":1,"content_index":0,"delta":"Here are the results."}` + "\n\n", + "event: response.output_text.annotation.added\n" + + `data: {"type":"response.output_text.annotation.added","annotation":{"type":"url_citation","url":"https://example.com/ai-news","title":"Latest AI News","start_index":0,"end_index":21},"annotation_index":0,"content_index":0,"item_id":"msg_01","output_index":1,"sequence_number":10}` + "\n\n", + "event: response.output_text.annotation.added\n" + + `data: {"type":"response.output_text.annotation.added","annotation":{"type":"url_citation","url":"https://example.com/more-news","title":"More AI News","start_index":22,"end_index":40},"annotation_index":1,"content_index":0,"item_id":"msg_01","output_index":1,"sequence_number":11}` + "\n\n", "event: response.output_item.done\n" + - `data: {"type":"response.output_item.done","output_index":1,"item":{"type":"message","id":"msg_01","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Here are the results.","annotations":[{"type":"url_citation","url":"https://example.com/ai-news","title":"Latest AI News","start_index":0,"end_index":21}]}]}}` + "\n\n", + `data: {"type":"response.output_item.done","output_index":1,"item":{"type":"message","id":"msg_01","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Here are the results.","annotations":[{"type":"url_citation","url":"https://example.com/ai-news","title":"Latest AI News","start_index":0,"end_index":21},{"type":"url_citation","url":"https://example.com/more-news","title":"More AI News","start_index":22,"end_index":40}]}]}}` + "\n\n", "event: response.completed\n" + `data: {"type":"response.completed","response":{"id":"resp_01","status":"completed","output":[],"usage":{"input_tokens":100,"output_tokens":50,"total_tokens":150}}}` + "\n\n", } @@ -4090,6 +4094,7 @@ func TestResponsesStream_WebSearchResponse(t *testing.T) { toolCalls []fantasy.StreamPart toolResults []fantasy.StreamPart textDeltas []fantasy.StreamPart + sources []fantasy.StreamPart finishes []fantasy.StreamPart ) for _, p := range parts { @@ -4102,6 +4107,8 @@ func TestResponsesStream_WebSearchResponse(t *testing.T) { toolResults = append(toolResults, p) case fantasy.StreamPartTypeTextDelta: textDeltas = append(textDeltas, p) + case fantasy.StreamPartTypeSource: + sources = append(sources, p) case fantasy.StreamPartTypeFinish: finishes = append(finishes, p) } @@ -4123,6 +4130,16 @@ func TestResponsesStream_WebSearchResponse(t *testing.T) { require.NotEmpty(t, textDeltas, "should have text deltas") require.Equal(t, "Here are the results.", textDeltas[0].Delta) + require.Len(t, sources, 2, "should have two source citations from annotation events") + require.Equal(t, fantasy.SourceTypeURL, sources[0].SourceType) + require.Equal(t, "https://example.com/ai-news", sources[0].URL) + require.Equal(t, "Latest AI News", sources[0].Title) + require.NotEmpty(t, sources[0].ID, "source should have an ID") + require.Equal(t, fantasy.SourceTypeURL, sources[1].SourceType) + require.Equal(t, "https://example.com/more-news", sources[1].URL) + require.Equal(t, "More AI News", sources[1].Title) + require.NotEmpty(t, sources[1].ID, "source should have an ID") + require.Len(t, finishes, 1) responsesMeta, ok := finishes[0].ProviderMetadata[Name].(*ResponsesProviderMetadata) require.True(t, ok) diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 1fa9af515..eb027109e 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -1087,6 +1087,43 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( return } + case "response.output_text.annotation.added": + added := event.AsResponseOutputTextAnnotationAdded() + // The Annotation field is typed as `any` in the SDK; + // it deserializes as map[string]interface{} from JSON. + annotationMap, ok := added.Annotation.(map[string]interface{}) + if !ok { + break + } + annotationType, _ := annotationMap["type"].(string) + switch annotationType { + case "url_citation": + url, _ := annotationMap["url"].(string) + title, _ := annotationMap["title"].(string) + if !yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeSource, + ID: uuid.NewString(), + SourceType: fantasy.SourceTypeURL, + URL: url, + Title: title, + }) { + return + } + case "file_citation": + title := "Document" + if fn, ok := annotationMap["filename"].(string); ok && fn != "" { + title = fn + } + if !yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeSource, + ID: uuid.NewString(), + SourceType: fantasy.SourceTypeDocument, + Title: title, + }) { + return + } + } + case "response.reasoning_summary_part.added": added := event.AsResponseReasoningSummaryPartAdded() state := activeReasoning[added.ItemID] From ebc9cb148ddf8557bef85674298ed6bfe79aa3b0 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 25 Mar 2026 10:24:20 -0300 Subject: [PATCH 28/32] chore: run modernize (#188) --- providers/google/google.go | 2 +- providers/openai/openai_test.go | 48 ++++++++++---------- providers/openai/provider_options.go | 4 +- providers/openai/responses_language_model.go | 4 +- providers/openai/responses_params_test.go | 22 ++++----- providers/openrouter/provider_options.go | 4 +- providers/vercel/provider_options.go | 4 +- providertests/anthropic_test.go | 6 +-- providertests/azure_responses_test.go | 2 +- providertests/common_test.go | 12 ++--- providertests/google_test.go | 6 +-- providertests/image_upload_test.go | 4 +- providertests/object_test.go | 8 ++-- providertests/openai_responses_test.go | 2 +- providertests/openai_web_search_test.go | 4 +- providertests/provider_registry_test.go | 12 ++--- schema/schema.go | 4 +- util.go | 4 +- 18 files changed, 79 insertions(+), 73 deletions(-) diff --git a/providers/google/google.go b/providers/google/google.go index 5d3f05152..700341f7c 100644 --- a/providers/google/google.go +++ b/providers/google/google.go @@ -255,7 +255,7 @@ func (g languageModel) prepareParams(call fantasy.Call) (*genai.GenerateContentC Type: fantasy.CallWarningTypeOther, Message: "The 'thinking_budget' option can not be under 128 and will be set to 128 by default", }) - providerOptions.ThinkingConfig.ThinkingBudget = fantasy.Opt(int64(128)) + providerOptions.ThinkingConfig.ThinkingBudget = new(int64(128)) } if providerOptions.ThinkingConfig.ThinkingLevel != nil && diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 07bcdc981..254ae6354 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -947,7 +947,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - LogProbs: fantasy.Opt(true), + LogProbs: new(true), }), }) @@ -1068,8 +1068,8 @@ func TestDoGenerate(t *testing.T) { LogitBias: map[string]int64{ "50256": -100, }, - ParallelToolCalls: fantasy.Opt(false), - User: fantasy.Opt("test-user-id"), + ParallelToolCalls: new(false), + User: new("test-user-id"), }), }) @@ -1109,7 +1109,7 @@ func TestDoGenerate(t *testing.T) { Prompt: testPrompt, ProviderOptions: NewProviderOptions( &ProviderOptions{ - ReasoningEffort: ReasoningEffortOption(ReasoningEffortLow), + ReasoningEffort: new(ReasoningEffortLow), }, ), }) @@ -1149,7 +1149,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - TextVerbosity: fantasy.Opt("low"), + TextVerbosity: new("low"), }), }) @@ -1610,7 +1610,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - MaxCompletionTokens: fantasy.Opt(int64(255)), + MaxCompletionTokens: new(int64(255)), }), }) @@ -1694,7 +1694,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - Store: fantasy.Opt(true), + Store: new(true), }), }) @@ -1776,7 +1776,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - PromptCacheKey: fantasy.Opt("test-cache-key-123"), + PromptCacheKey: new("test-cache-key-123"), }), }) @@ -1815,7 +1815,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - SafetyIdentifier: fantasy.Opt("test-safety-identifier-123"), + SafetyIdentifier: new("test-safety-identifier-123"), }), }) @@ -1887,7 +1887,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("flex"), + ServiceTier: new("flex"), }), }) @@ -1924,7 +1924,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("flex"), + ServiceTier: new("flex"), }), }) @@ -1958,7 +1958,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("priority"), + ServiceTier: new("priority"), }), }) @@ -1995,7 +1995,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("priority"), + ServiceTier: new("priority"), }), }) @@ -2752,7 +2752,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - Store: fantasy.Opt(true), + Store: new(true), }), }) @@ -2842,7 +2842,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("flex"), + ServiceTier: new("flex"), }), }) @@ -2885,7 +2885,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: fantasy.Opt("priority"), + ServiceTier: new("priority"), }), }) @@ -3686,7 +3686,7 @@ func TestResponsesGenerate_StoreOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: fantasy.Opt(true), + Store: new(true), }, }, }) @@ -3710,8 +3710,8 @@ func TestResponsesGenerate_PreviousResponseIDOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_prev_123"), - Store: fantasy.Opt(true), + PreviousResponseID: new("resp_prev_123"), + Store: new(true), }, }, }) @@ -3758,7 +3758,7 @@ func TestResponsesGenerate_StateChainingAcrossTurns(t *testing.T) { first, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ - Name: &ResponsesProviderOptions{Store: fantasy.Opt(true)}, + Name: &ResponsesProviderOptions{Store: new(true)}, }, }) require.NoError(t, err) @@ -3799,7 +3799,7 @@ func TestResponsesGenerate_StateChainingAcrossTurns(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: fantasy.Opt(true), + Store: new(true), PreviousResponseID: &meta.ResponseID, }, }, @@ -4164,7 +4164,7 @@ func TestResponsesStream_StoreOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: fantasy.Opt(true), + Store: new(true), }, }, }) @@ -4197,8 +4197,8 @@ func TestResponsesStream_PreviousResponseIDOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_prev_456"), - Store: fantasy.Opt(true), + PreviousResponseID: new("resp_prev_456"), + Store: new(true), }, }, }) diff --git a/providers/openai/provider_options.go b/providers/openai/provider_options.go index 50abadbb2..141fd2dc4 100644 --- a/providers/openai/provider_options.go +++ b/providers/openai/provider_options.go @@ -146,8 +146,10 @@ func (o *ProviderFileOptions) UnmarshalJSON(data []byte) error { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value. +// +//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return &e + return new(e) } // NewProviderOptions creates new provider options for OpenAI. diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index eb027109e..bd61a68ba 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -1090,8 +1090,8 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( case "response.output_text.annotation.added": added := event.AsResponseOutputTextAnnotationAdded() // The Annotation field is typed as `any` in the SDK; - // it deserializes as map[string]interface{} from JSON. - annotationMap, ok := added.Annotation.(map[string]interface{}) + // it deserializes as map[string]any from JSON. + annotationMap, ok := added.Annotation.(map[string]any) if !ok { break } diff --git a/providers/openai/responses_params_test.go b/providers/openai/responses_params_test.go index 2687f1db5..f533c0bae 100644 --- a/providers/openai/responses_params_test.go +++ b/providers/openai/responses_params_test.go @@ -21,12 +21,12 @@ func TestPrepareParams_Store(t *testing.T) { }{ { name: "store true", - opts: &ResponsesProviderOptions{Store: fantasy.Opt(true)}, + opts: &ResponsesProviderOptions{Store: new(true)}, wantStore: true, }, { name: "store false", - opts: &ResponsesProviderOptions{Store: fantasy.Opt(false)}, + opts: &ResponsesProviderOptions{Store: new(false)}, wantStore: false, }, { @@ -42,7 +42,6 @@ func TestPrepareParams_Store(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() @@ -65,8 +64,8 @@ func TestPrepareParams_PreviousResponseID(t *testing.T) { t.Parallel() params, warnings, err := lm.prepareParams(testCall(prompt, &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_abc123"), - Store: fantasy.Opt(true), + PreviousResponseID: new("resp_abc123"), + Store: new(true), })) require.NoError(t, err) require.Empty(t, warnings) @@ -87,7 +86,7 @@ func TestPrepareParams_PreviousResponseID(t *testing.T) { t.Parallel() params, warnings, err := lm.prepareParams(testCall(prompt, &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt(""), + PreviousResponseID: new(""), })) require.NoError(t, err) require.Empty(t, warnings) @@ -100,8 +99,8 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { lm := testResponsesLM() opts := &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_abc123"), - Store: fantasy.Opt(true), + PreviousResponseID: new("resp_abc123"), + Store: new(true), } t.Run("rejects with assistant messages", func(t *testing.T) { @@ -152,7 +151,7 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { _, _, err := lm.prepareParams(testCall(fantasy.Prompt{ testTextMessage(fantasy.MessageRoleUser, "hello"), }, &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_abc123"), + PreviousResponseID: new("resp_abc123"), })) require.EqualError(t, err, previousResponseIDStoreError) }) @@ -163,8 +162,8 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { _, _, err := lm.prepareParams(testCall(fantasy.Prompt{ testTextMessage(fantasy.MessageRoleUser, "hello"), }, &ResponsesProviderOptions{ - PreviousResponseID: fantasy.Opt("resp_abc123"), - Store: fantasy.Opt(false), + PreviousResponseID: new("resp_abc123"), + Store: new(false), })) require.EqualError(t, err, previousResponseIDStoreError) }) @@ -223,7 +222,6 @@ func TestValidatePreviousResponseIDPrompt(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() diff --git a/providers/openrouter/provider_options.go b/providers/openrouter/provider_options.go index ed2d8f5ed..742e91103 100644 --- a/providers/openrouter/provider_options.go +++ b/providers/openrouter/provider_options.go @@ -189,8 +189,10 @@ type ReasoningData struct { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value for OpenRouter. +// +//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return &e + return new(e) } // NewProviderOptions creates new provider options for OpenRouter. diff --git a/providers/vercel/provider_options.go b/providers/vercel/provider_options.go index 046ba940d..163921b97 100644 --- a/providers/vercel/provider_options.go +++ b/providers/vercel/provider_options.go @@ -170,8 +170,10 @@ type ReasoningData struct { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value. +// +//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return &e + return new(e) } // NewProviderOptions creates new provider options for Vercel. diff --git a/providertests/anthropic_test.go b/providertests/anthropic_test.go index 940ec477d..f0ee72667 100644 --- a/providertests/anthropic_test.go +++ b/providertests/anthropic_test.go @@ -177,7 +177,7 @@ func TestAnthropicWebSearch(t *testing.T) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) @@ -222,7 +222,7 @@ func TestAnthropicWebSearch(t *testing.T) { // Turn 1: initial query triggers web search. result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) @@ -266,7 +266,7 @@ func TestAnthropicWebSearch(t *testing.T) { result2, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Messages: history, Prompt: "How does that compare to Osaka?", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) diff --git a/providertests/azure_responses_test.go b/providertests/azure_responses_test.go index 8b3945ba4..b7c89084b 100644 --- a/providertests/azure_responses_test.go +++ b/providertests/azure_responses_test.go @@ -47,7 +47,7 @@ func TestAzureResponsesWithSummaryThinking(t *testing.T) { openai.IncludeReasoningEncryptedContent, }, ReasoningEffort: openai.ReasoningEffortOption(openai.ReasoningEffortHigh), - ReasoningSummary: fantasy.Opt("auto"), + ReasoningSummary: new("auto"), }, } var pairs []builderPair diff --git a/providertests/common_test.go b/providertests/common_test.go index 6878761ff..f13c93a92 100644 --- a/providertests/common_test.go +++ b/providertests/common_test.go @@ -70,7 +70,7 @@ func testSimple(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "Say hi in Portuguese", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -90,7 +90,7 @@ func testSimple(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "Say hi in Portuguese", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -149,7 +149,7 @@ func testTool(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What's the weather in Florence,Italy?", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -170,7 +170,7 @@ func testTool(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What's the weather in Florence,Italy?", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -255,7 +255,7 @@ func testMultiTool(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "Add and multiply the number 2 and 3", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -277,7 +277,7 @@ func testMultiTool(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "Add and multiply the number 2 and 3", ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") diff --git a/providertests/google_test.go b/providertests/google_test.go index d49e13a2a..cbd9fec8b 100644 --- a/providertests/google_test.go +++ b/providertests/google_test.go @@ -41,8 +41,8 @@ func TestGoogleThinking(t *testing.T) { gemini2Opts := fantasy.ProviderOptions{ google.Name: &google.ProviderOptions{ ThinkingConfig: &google.ThinkingConfig{ - ThinkingBudget: fantasy.Opt(int64(100)), - IncludeThoughts: fantasy.Opt(true), + ThinkingBudget: new(int64(100)), + IncludeThoughts: new(true), }, }, } @@ -50,7 +50,7 @@ func TestGoogleThinking(t *testing.T) { google.Name: &google.ProviderOptions{ ThinkingConfig: &google.ThinkingConfig{ ThinkingLevel: fantasy.Opt(google.ThinkingLevelHigh), - IncludeThoughts: fantasy.Opt(true), + IncludeThoughts: new(true), }, }, } diff --git a/providertests/image_upload_test.go b/providertests/image_upload_test.go index cf7fad7ca..5ec3ea4f3 100644 --- a/providertests/image_upload_test.go +++ b/providertests/image_upload_test.go @@ -90,7 +90,7 @@ func TestImageUploadAgent(t *testing.T) { Prompt: "Describe the image briefly in English.", Files: []fantasy.FilePart{file}, ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) got := result.Response.Content.Text() @@ -136,7 +136,7 @@ func TestImageUploadAgentStreaming(t *testing.T) { Prompt: "Describe the image briefly in English.", Files: []fantasy.FilePart{file}, ProviderOptions: pair.providerOptions, - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) got := result.Response.Content.Text() diff --git a/providertests/object_test.go b/providertests/object_test.go index f5e9b791e..5a4c17e59 100644 --- a/providertests/object_test.go +++ b/providertests/object_test.go @@ -104,7 +104,7 @@ func testSimpleObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Person", SchemaDescription: "A person with name, age, and city", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to generate object") @@ -127,7 +127,7 @@ func testSimpleObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Person", SchemaDescription: "A person with name, age, and city", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to create object stream") @@ -277,7 +277,7 @@ func testComplexObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Book", SchemaDescription: "A book with title, author, genres, and publication year", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to generate object") @@ -300,7 +300,7 @@ func testComplexObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Book", SchemaDescription: "A book with title, author, genres, and publication year", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to create object stream") diff --git a/providertests/openai_responses_test.go b/providertests/openai_responses_test.go index db85f73d4..38ad7ea7a 100644 --- a/providertests/openai_responses_test.go +++ b/providertests/openai_responses_test.go @@ -40,7 +40,7 @@ func TestOpenAIResponsesWithSummaryThinking(t *testing.T) { openai.IncludeReasoningEncryptedContent, }, ReasoningEffort: openai.ReasoningEffortOption(openai.ReasoningEffortHigh), - ReasoningSummary: fantasy.Opt("auto"), + ReasoningSummary: new("auto"), }, } var pairs []builderPair diff --git a/providertests/openai_web_search_test.go b/providertests/openai_web_search_test.go index 1fe4418fa..8e8eb50e2 100644 --- a/providertests/openai_web_search_test.go +++ b/providertests/openai_web_search_test.go @@ -47,7 +47,7 @@ func TestOpenAIWebSearch(t *testing.T) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) @@ -96,7 +96,7 @@ func TestOpenAIWebSearch(t *testing.T) { // Turn 1: initial query triggers web search. result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: fantasy.Opt(int64(4000)), + MaxOutputTokens: new(int64(4000)), }) require.NoError(t, err) diff --git a/providertests/provider_registry_test.go b/providertests/provider_registry_test.go index 9340e50b6..c0f3f848e 100644 --- a/providertests/provider_registry_test.go +++ b/providertests/provider_registry_test.go @@ -20,7 +20,7 @@ func TestProviderRegistry_Serialization_OpenAIOptions(t *testing.T) { fantasy.TextPart{Text: "hi"}, }, ProviderOptions: fantasy.ProviderOptions{ - openai.Name: &openai.ProviderOptions{User: fantasy.Opt("tester")}, + openai.Name: &openai.ProviderOptions{User: new("tester")}, }, } @@ -60,8 +60,8 @@ func TestProviderRegistry_Serialization_OpenAIResponses(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ openai.Name: &openai.ResponsesProviderOptions{ - PromptCacheKey: fantasy.Opt("cache-key-1"), - ParallelToolCalls: fantasy.Opt(true), + PromptCacheKey: new("cache-key-1"), + ParallelToolCalls: new(true), }, }, } @@ -215,7 +215,7 @@ func TestProviderRegistry_Serialization_OpenRouterOptions(t *testing.T) { ProviderOptions: fantasy.ProviderOptions{ openrouter.Name: &openrouter.ProviderOptions{ IncludeUsage: &includeUsage, - User: fantasy.Opt("test-user"), + User: new("test-user"), }, }, } @@ -245,7 +245,7 @@ func TestProviderRegistry_Serialization_OpenAICompatOptions(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ openaicompat.Name: &openaicompat.ProviderOptions{ - User: fantasy.Opt("test-user"), + User: new("test-user"), ReasoningEffort: &effort, }, }, @@ -276,7 +276,7 @@ func TestProviderRegistry_MultiProvider(t *testing.T) { fantasy.TextPart{Text: "test"}, }, ProviderOptions: fantasy.ProviderOptions{ - openai.Name: &openai.ProviderOptions{User: fantasy.Opt("user1")}, + openai.Name: &openai.ProviderOptions{User: new("user1")}, anthropic.Name: &anthropic.ProviderOptions{ SendReasoning: &sendReasoning, }, diff --git a/schema/schema.go b/schema/schema.go index c1cc46d2b..92ccd7b34 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -122,8 +122,8 @@ func generateSchemaRecursive(t reflect.Type, visited map[reflect.Type]bool) Sche Type: "object", Properties: make(map[string]*Schema), } - for i := range t.NumField() { - field := t.Field(i) + for field := range t.Fields() { + field := field if !field.IsExported() { continue diff --git a/util.go b/util.go index 7bb9f48ff..74f02ede3 100644 --- a/util.go +++ b/util.go @@ -3,8 +3,10 @@ package fantasy import "github.com/go-viper/mapstructure/v2" // Opt creates a pointer to the given value. +// +//go:fix inline func Opt[T any](v T) *T { - return &v + return new(v) } // ParseOptions parses the given options map into the provided struct. From d13521ab698a2f28f58f123d0cd424855b8dab33 Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:45:47 +0100 Subject: [PATCH 29/32] chore(openai): add missing constants and checks for some thinking effort levels (#186) We were missing some "none", "minimal" and "xhigh" constants, for the `openai`, `openaicompat` and `openrouter` packages. Added the missing checks to ensure they work as well. Co-authored-by: Andrey Nering --- providers/openai/language_model_hooks.go | 4 ++++ providers/openai/provider_options.go | 4 ++++ providers/openaicompat/language_model_hooks.go | 4 ++++ providers/openrouter/provider_options.go | 6 ++++++ 4 files changed, 18 insertions(+) diff --git a/providers/openai/language_model_hooks.go b/providers/openai/language_model_hooks.go index 34ed74c99..e1131bc77 100644 --- a/providers/openai/language_model_hooks.go +++ b/providers/openai/language_model_hooks.go @@ -111,6 +111,8 @@ func DefaultPrepareCallFunc(model fantasy.LanguageModel, params *openai.ChatComp if providerOptions.ReasoningEffort != nil { switch *providerOptions.ReasoningEffort { + case ReasoningEffortNone: + params.ReasoningEffort = shared.ReasoningEffortNone case ReasoningEffortMinimal: params.ReasoningEffort = shared.ReasoningEffortMinimal case ReasoningEffortLow: @@ -119,6 +121,8 @@ func DefaultPrepareCallFunc(model fantasy.LanguageModel, params *openai.ChatComp params.ReasoningEffort = shared.ReasoningEffortMedium case ReasoningEffortHigh: params.ReasoningEffort = shared.ReasoningEffortHigh + case ReasoningEffortXHigh: + params.ReasoningEffort = shared.ReasoningEffortXhigh default: return nil, fmt.Errorf("reasoning model `%s` not supported", *providerOptions.ReasoningEffort) } diff --git a/providers/openai/provider_options.go b/providers/openai/provider_options.go index 141fd2dc4..0e5e8336f 100644 --- a/providers/openai/provider_options.go +++ b/providers/openai/provider_options.go @@ -12,6 +12,8 @@ import ( type ReasoningEffort string const ( + // ReasoningEffortNone represents ReasoningEffortNone reasoning effort. + ReasoningEffortNone ReasoningEffort = "none" // ReasoningEffortMinimal represents minimal reasoning effort. ReasoningEffortMinimal ReasoningEffort = "minimal" // ReasoningEffortLow represents low reasoning effort. @@ -20,6 +22,8 @@ const ( ReasoningEffortMedium ReasoningEffort = "medium" // ReasoningEffortHigh represents high reasoning effort. ReasoningEffortHigh ReasoningEffort = "high" + // ReasoningEffortXHigh represents extra-high reasoning effort. + ReasoningEffortXHigh ReasoningEffort = "xhigh" ) // Global type identifiers for OpenAI-specific provider data. diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index 4da86c0f4..b43cb4eea 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -27,6 +27,8 @@ func PrepareCallFunc(_ fantasy.LanguageModel, params *openaisdk.ChatCompletionNe if providerOptions.ReasoningEffort != nil { switch *providerOptions.ReasoningEffort { + case openai.ReasoningEffortNone: + params.ReasoningEffort = shared.ReasoningEffortNone case openai.ReasoningEffortMinimal: params.ReasoningEffort = shared.ReasoningEffortMinimal case openai.ReasoningEffortLow: @@ -35,6 +37,8 @@ func PrepareCallFunc(_ fantasy.LanguageModel, params *openaisdk.ChatCompletionNe params.ReasoningEffort = shared.ReasoningEffortMedium case openai.ReasoningEffortHigh: params.ReasoningEffort = shared.ReasoningEffortHigh + case openai.ReasoningEffortXHigh: + params.ReasoningEffort = shared.ReasoningEffortXhigh default: return nil, fmt.Errorf("reasoning model `%s` not supported", *providerOptions.ReasoningEffort) } diff --git a/providers/openrouter/provider_options.go b/providers/openrouter/provider_options.go index 742e91103..5ef7f9dd4 100644 --- a/providers/openrouter/provider_options.go +++ b/providers/openrouter/provider_options.go @@ -11,12 +11,18 @@ import ( type ReasoningEffort string const ( + // ReasoningEffortNone represents ReasoningEffortNone reasoning effort. + ReasoningEffortNone ReasoningEffort = "none" + // ReasoningEffortMinimal represents minimal reasoning effort. + ReasoningEffortMinimal ReasoningEffort = "minimal" // ReasoningEffortLow represents low reasoning effort. ReasoningEffortLow ReasoningEffort = "low" // ReasoningEffortMedium represents medium reasoning effort. ReasoningEffortMedium ReasoningEffort = "medium" // ReasoningEffortHigh represents high reasoning effort. ReasoningEffortHigh ReasoningEffort = "high" + // ReasoningEffortXHigh represents extra high reasoning effort. + ReasoningEffortXHigh ReasoningEffort = "xhigh" ) // Global type identifiers for OpenRouter-specific provider data. From 11a1e0f2c9bb91f20774801579cc7c4de90b1017 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 25 Mar 2026 10:48:49 -0300 Subject: [PATCH 30/32] v0.17.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index c5523bd09..7cca7711a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.17.0 +0.17.1 From 112927d9b6d8406157b87b010ca07ee1554396b4 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Wed, 11 Mar 2026 12:26:36 +0000 Subject: [PATCH 31/32] chore: downgrade to Go 1.25 Remove kronk provider and examples (every published version requires go 1.26). Downgrade kaptinlin deps to Go 1.25-compatible versions. --- examples/kronk/simple/main.go | 93 --- examples/kronk/stream/main.go | 181 ----- go.mod | 106 +-- go.sum | 256 ++----- providers/google/google.go | 2 +- providers/kronk/README.md | 26 - providers/kronk/kronk.go | 156 ----- providers/kronk/language_model.go | 669 ------------------- providers/kronk/language_model_hooks.go | 269 -------- providers/kronk/options.go | 71 -- providers/kronk/provider_options.go | 104 --- providers/openai/openai_test.go | 48 +- providers/openai/provider_options.go | 4 +- providers/openai/responses_language_model.go | 4 +- providers/openai/responses_params_test.go | 22 +- providers/openrouter/provider_options.go | 4 +- providers/vercel/provider_options.go | 4 +- providertests/anthropic_test.go | 6 +- providertests/azure_responses_test.go | 2 +- providertests/common_test.go | 12 +- providertests/google_test.go | 6 +- providertests/image_upload_test.go | 4 +- providertests/object_test.go | 8 +- providertests/openai_responses_test.go | 2 +- providertests/openai_web_search_test.go | 4 +- providertests/provider_registry_test.go | 12 +- schema/schema.go | 4 +- util.go | 4 +- 28 files changed, 160 insertions(+), 1923 deletions(-) delete mode 100644 examples/kronk/simple/main.go delete mode 100644 examples/kronk/stream/main.go delete mode 100644 providers/kronk/README.md delete mode 100644 providers/kronk/kronk.go delete mode 100644 providers/kronk/language_model.go delete mode 100644 providers/kronk/language_model_hooks.go delete mode 100644 providers/kronk/options.go delete mode 100644 providers/kronk/provider_options.go diff --git a/examples/kronk/simple/main.go b/examples/kronk/simple/main.go deleted file mode 100644 index 44919fd4e..000000000 --- a/examples/kronk/simple/main.go +++ /dev/null @@ -1,93 +0,0 @@ -package main - -// This is a basic example illustrating how to create an agent with a custom -// tool call. - -import ( - "context" - "fmt" - "os" - "time" - - "charm.land/fantasy" - "charm.land/fantasy/providers/kronk" -) - -const modelURL = "Qwen/Qwen3-8B-GGUF/Qwen3-8B-Q8_0.gguf" - -func main() { - if err := run(); err != nil { - fmt.Printf("\nERROR: %s\n", err) - os.Exit(1) - } -} - -func run() error { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) - defer cancel() - - // Create the provider with optional logging. - provider, err := kronk.New( - kronk.WithName("kronk"), - kronk.WithLogger(kronk.FmtLogger), - ) - if err != nil { - return fmt.Errorf("unable to create provider: %w", err) - } - - // Clean up when done. - defer func() { - fmt.Println("\nUnloading Kronk") - if closer, ok := provider.(interface{ Close(context.Context) error }); ok { - if err := closer.Close(context.Background()); err != nil { - fmt.Printf("failed to close provider: %v\n", err) - } - } - }() - - // Get a language model by providing the model URL. - // The provider will download and initialize the model automatically. - model, err := provider.LanguageModel(ctx, modelURL) - if err != nil { - return fmt.Errorf("unable to get language model: %w", err) - } - - // ------------------------------------------------------------------------- - - // Let's make a tool that fetches info about cute dogs. Here's a schema - // for the tool's input. - type cuteDogQuery struct { - Location string `json:"location" description:"The location to search for cute dogs."` - } - - // And here's the implementation of that tool. - fetchCuteDogInfo := func(ctx context.Context, input cuteDogQuery, _ fantasy.ToolCall) (fantasy.ToolResponse, error) { - if input.Location == "Silver Lake, Los Angeles" { - return fantasy.NewTextResponse("Cute dogs are everywhere!"), nil - } - return fantasy.NewTextResponse("No cute dogs found."), nil - } - - // Add the tool. - cuteDogTool := fantasy.NewAgentTool("cute_dog_tool", "Provide up-to-date info on cute dogs.", fetchCuteDogInfo) - - // Equip your agent. - agent := fantasy.NewAgent(model, - fantasy.WithSystemPrompt("You are a moderately helpful, dog-centric assistant."), - fantasy.WithTools(cuteDogTool), - fantasy.WithMaxOutputTokens(2048), - fantasy.WithTemperature(0.7), - fantasy.WithTopP(0.8), - fantasy.WithTopK(20), - ) - - // Put that agent to work! - const prompt = "Find all the cute dogs in Silver Lake, Los Angeles. Use the cute dog tool." - result, err := agent.Generate(ctx, fantasy.AgentCall{Prompt: prompt}) - if err != nil { - return fmt.Errorf("agent generate failed: %w", err) - } - fmt.Println(result.Response.Content.Text()) - - return nil -} diff --git a/examples/kronk/stream/main.go b/examples/kronk/stream/main.go deleted file mode 100644 index e63465919..000000000 --- a/examples/kronk/stream/main.go +++ /dev/null @@ -1,181 +0,0 @@ -package main - -// This example demonstrates how to hook into the various parts of a streaming -// tool call. - -import ( - "context" - "fmt" - "math/rand/v2" - "os" - "strings" - "time" - - "charm.land/fantasy" - "charm.land/fantasy/providers/kronk" -) - -const modelURL = "Qwen/Qwen3-8B-GGUF/Qwen3-8B-Q8_0.gguf" - -const systemPrompt = ` -You are moderately helpful assistant with a new puppy named Chuck. Chuck is -moody and ranges from very happy to very annoyed. He's pretty happy-go-lucky, -but new encounters make him pretty uncomfortable. - -You despise emojis and never use them. Same with Markdown. Same with em-dashes. -You prefer "welp" to "well" when starting a sentence (that's just how you were -raised). You also don't use run-on sentences, including entering a comma where -there should be a period. You had a decent education and did well in elementary -school grammar. You grew up in the United States, specifically Kansas City, -Missouri. -` - -// Input for a tool call. The LLM will look at the struct tags and fill out the -// values as necessary. -type dogInteraction struct { - OtherDogName string `json:"dogName" description:"Name of the other dog. Just make something up. All the dogs are named after Japanese cars from the 80s."` -} - -// Here's a tool call. In this case it's a set of random barks. -func letsBark(ctx context.Context, i dogInteraction, _ fantasy.ToolCall) (fantasy.ToolResponse, error) { - var r fantasy.ToolResponse - if rand.Float64() >= 0.5 { - r.Content = randomBarks(1, 3) - } else { - r.Content = randomBarks(5, 10) - } - return r, nil -} - -func main() { - if err := run(); err != nil { - fmt.Printf("\nERROR: %s\n", err) - os.Exit(1) - } -} - -func run() error { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) - defer cancel() - - // Create the provider with optional logging. - provider, err := kronk.New( - kronk.WithName("kronk"), - kronk.WithLogger(kronk.FmtLogger), - ) - if err != nil { - return fmt.Errorf("unable to create provider: %w", err) - } - - // Clean up when done. - defer func() { - fmt.Println("\nUnloading Kronk") - if closer, ok := provider.(interface{ Close(context.Context) error }); ok { - if err := closer.Close(context.Background()); err != nil { - fmt.Printf("failed to close provider: %v\n", err) - } - } - }() - - // Get a language model by providing the model URL. - // The provider will download and initialize the model automatically. - model, err := provider.LanguageModel(ctx, modelURL) - if err != nil { - return fmt.Errorf("unable to get language model: %w", err) - } - - // ------------------------------------------------------------------------- - - // Let's add a tool to our belt. A tool for dogs. - barkTool := fantasy.NewAgentTool( - "bark", - "Have Chuck express his feelings by barking. A few barks means he's happy and many barks means he's not.", - letsBark, - ) - - // Time to make the agent. - agent := fantasy.NewAgent( - model, - fantasy.WithSystemPrompt(systemPrompt), - fantasy.WithTools(barkTool), - ) - - // Alright, let's setup a streaming request! - streamCall := fantasy.AgentStreamCall{ - // The prompt. - Prompt: "what does Chuck say when he is happy", - - // When reasoning starts (Qwen3 models use "thinking" mode). - OnReasoningStart: func(id string, content fantasy.ReasoningContent) error { - fmt.Print("\n[Thinking: ") - return nil - }, - - // When we receive reasoning content. - OnReasoningDelta: func(id, text string) error { - // Print reasoning in a subdued way - fmt.Print(text) - return nil - }, - - // When reasoning ends. - OnReasoningEnd: func(id string, reasoning fantasy.ReasoningContent) error { - fmt.Print("]\n\n") - return nil - }, - - // When we receive a chunk of streaming data. - OnTextDelta: func(id, text string) error { - _, fmtErr := fmt.Print(text) - return fmtErr - }, - - // When tool calls are invoked. - OnToolCall: func(toolCall fantasy.ToolCallContent) error { - fmt.Printf("\n-> Invoking the %s tool with input %s\n", toolCall.ToolName, toolCall.Input) - return nil - }, - - // When a tool call completes. - OnToolResult: func(res fantasy.ToolResultContent) error { - text, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](res.Result) - if !ok { - return fmt.Errorf("failed to cast result to text") - } - _, fmtErr := fmt.Printf("\n-> Using the %s tool: %s", res.ToolName, text.Text) - return fmtErr - }, - - // When a step finishes, such as a tool call or a response from the - // LLM. - OnStepFinish: func(_ fantasy.StepResult) error { - fmt.Print("\n-> Step completed\n") - return nil - }, - } - - fmt.Println("Generating...") - - // Finally, let's stream everything! - _, err = agent.Stream(ctx, streamCall) - if err != nil { - fmt.Fprintf(os.Stderr, "Error generating response: %v\n", err) - os.Exit(1) - } - - return nil -} - -// Return a random number of barks between low and high. -func randomBarks(low, high int) string { - const bark = "ruff" - numBarks := low + rand.IntN(high-low+1) - var barks strings.Builder - for i := range numBarks { - if i > 0 { - barks.WriteString(" ") - } - barks.WriteString(bark) - } - return barks.String() -} diff --git a/go.mod b/go.mod index 40fc064f3..39e034748 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,10 @@ module charm.land/fantasy -go 1.26.1 +go 1.25.0 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.18.2 - github.com/ardanlabs/kronk v1.21.4 github.com/aws/aws-sdk-go-v2 v1.41.4 github.com/aws/aws-sdk-go-v2/config v1.32.12 github.com/aws/smithy-go v1.24.2 @@ -16,119 +15,66 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.6 + github.com/kaptinlin/jsonschema v0.6.10 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 google.golang.org/genai v1.51.0 ) require ( - cel.dev/expr v0.25.1 // indirect - cloud.google.com/go v0.123.0 // indirect + cloud.google.com/go v0.116.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.5.3 // indirect - cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.61.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/ebitengine/purego v0.10.0 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect - github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // indirect + github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/goccy/go-yaml v1.19.2 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.18.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect + github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.5 // indirect - github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hybridgroup/yzma v1.11.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/jupiterrider/ffi v0.6.0 // indirect - github.com/kaptinlin/go-i18n v0.2.12 // indirect - github.com/kaptinlin/jsonpointer v0.4.17 // indirect - github.com/kaptinlin/messageformat-go v0.4.18 // indirect - github.com/klauspost/compress v1.18.4 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nikolalohinski/gonja/v2 v2.7.0 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/procfs v0.20.1 // indirect - github.com/sirupsen/logrus v1.9.4 // indirect - github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect + github.com/kaptinlin/go-i18n v0.2.3 // indirect + github.com/kaptinlin/jsonpointer v0.4.9 // indirect + github.com/kaptinlin/messageformat-go v0.4.9 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect - github.com/ulikunitz/xz v0.5.15 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect - go.opentelemetry.io/otel v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect - go.opentelemetry.io/otel/trace v1.42.0 // indirect - go.opentelemetry.io/proto/otlp v1.10.0 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/otel/trace v1.39.0 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect - golang.org/x/crypto v0.49.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/net v0.52.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/text v0.35.0 // indirect - golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.271.0 // indirect - google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/grpc v1.79.2 // indirect + golang.org/x/crypto v0.47.0 // indirect + golang.org/x/net v0.49.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.33.0 // indirect + golang.org/x/time v0.14.0 // indirect + google.golang.org/api v0.264.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect + google.golang.org/grpc v1.78.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 94d6438c5..b514fbb8e 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,13 @@ -cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= -cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q= charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM= -cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= -cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= +cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= -cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= -cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= -cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= -cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= -cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= -cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= -cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= -cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= -cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -30,22 +16,10 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xP github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= -github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= -github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= -github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM= github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= @@ -58,18 +32,10 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDk github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= @@ -80,12 +46,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8 github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab h1:J7XQLgl9sefgTnTGrmX3xqvp5o6MCiBzEjGv5igAlc4= @@ -96,140 +56,72 @@ github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 h1:DTSZx github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms= github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ= github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0= +github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= -github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= -github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= -github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= -github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= -github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= -github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= -github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= -github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM= +github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo= +github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 h1:vymEbVwYFP/L05h5TKQxvkXoKxNvTpjxYKdF1Nlwuao= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= +github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e h1:Lf/gRkoycfOBPa42vU2bbgPurFong6zXeFtPoxholzU= +github.com/go-json-experiment/json v0.0.0-20251027170946-4849db3c2f7e/go.mod h1:uNVvRXArCGbZ508SxYYTC5v1JWoz2voff5pm25jU1Ok= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= -github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= -github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= -github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= -github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= +github.com/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= +github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= +github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= +github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1B20hUJexxqqmQ2OTs1+0s= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= -github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= -github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= -github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.11.0 h1:dIAs/GoV8imTB1fsFk1ft0ejI5APhUK6iHBSMudbfZc= -github.com/hybridgroup/yzma v1.11.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= -github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= -github.com/kaptinlin/go-i18n v0.2.12 h1:ywDsvb4KDFddMC2dpI/rrIzGU2mWUSvHmWUm9BMsdl4= -github.com/kaptinlin/go-i18n v0.2.12/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= -github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= -github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.6 h1:UUMqZGFAk7nOzQsYAxvgygm4wpDp/nwXxA4VP9mCPCs= -github.com/kaptinlin/jsonschema v0.7.6/go.mod h1:GGk/oE+F1lWUfYrzKaCf4QWZmMdytt0LL4XdFEFB0LE= -github.com/kaptinlin/messageformat-go v0.4.18 h1:RBlHVWgZyoxTcUgGWBsl2AcyScq/urqbLZvzgryTmSI= -github.com/kaptinlin/messageformat-go v0.4.18/go.mod h1:ntI3154RnqJgr7GaC+vZBnIExl2V3sv9selvRNNEM24= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/kaptinlin/go-i18n v0.2.3 h1:jyN/YOXXLcnGRBLdU+a8+6782B97fWE5aQqAHtvvk8Q= +github.com/kaptinlin/go-i18n v0.2.3/go.mod h1:O+Ax4HkMO0Jt4OaP4E4WCx0PAADeWkwk8Jgt9bjAU1w= +github.com/kaptinlin/jsonpointer v0.4.9 h1:o//bYf4PCvnMJIIX8bIg77KB6DO3wBPAabRyPRKh680= +github.com/kaptinlin/jsonpointer v0.4.9/go.mod h1:9y0LgXavlmVE5FSHShY5LRlURJJVhbyVJSRWkilrTqA= +github.com/kaptinlin/jsonschema v0.6.10 h1:CYded7nrwVu7pU1GaIjtd9dSzgqZjh7+LTKFaWqS08I= +github.com/kaptinlin/jsonschema v0.6.10/go.mod h1:ZXZ4K5KrRmCCF1i6dgvBsQifl+WTb8XShKj0NpQNrz8= +github.com/kaptinlin/messageformat-go v0.4.9 h1:FR5j5n4aL4nG0afKn9vvANrKxLu7HjmbhJnw5ogIwAQ= +github.com/kaptinlin/messageformat-go v0.4.9/go.mod h1:qZzrGrlvWDz2KyyvN3dOWcK9PVSRV1BnfnNU+zB/RWc= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/nikolalohinski/gonja/v2 v2.7.0 h1:XuwnulQVPwzGaM0J/9AaQv0AFPBAxKI1GILifQ1r9pk= -github.com/nikolalohinski/gonja/v2 v2.7.0/go.mod h1:UIzXPVuOsr5h7dZ5DUbqk3/Z7oFA/NLGQGMjqT4L2aU= -github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= -github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= -github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= -github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= -github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= -github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= -github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= -github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -242,74 +134,48 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= -github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0 h1:kpt2PEJuOuqYkPcktfJqWWDjTEd/FNgrxcniL7kQrXQ= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= -go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= -go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= -go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= -google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= +google.golang.org/api v0.264.0 h1:+Fo3DQXBK8gLdf8rFZ3uLu39JpOnhvzJrLMQSoSYZJM= +google.golang.org/api v0.264.0/go.mod h1:fAU1xtNNisHgOF5JooAs8rRaTkl2rT3uaoNGo9NS3R8= google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= -google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= +google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/providers/google/google.go b/providers/google/google.go index 700341f7c..5d3f05152 100644 --- a/providers/google/google.go +++ b/providers/google/google.go @@ -255,7 +255,7 @@ func (g languageModel) prepareParams(call fantasy.Call) (*genai.GenerateContentC Type: fantasy.CallWarningTypeOther, Message: "The 'thinking_budget' option can not be under 128 and will be set to 128 by default", }) - providerOptions.ThinkingConfig.ThinkingBudget = new(int64(128)) + providerOptions.ThinkingConfig.ThinkingBudget = fantasy.Opt(int64(128)) } if providerOptions.ThinkingConfig.ThinkingLevel != nil && diff --git a/providers/kronk/README.md b/providers/kronk/README.md deleted file mode 100644 index 0e60403d2..000000000 --- a/providers/kronk/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Kronk - -> [!IMPORTANT] -> The Kronk provider for Fantasy is considered experimental! -> The API and behavior can change until we consider it stable. - -[Kronk][kronk] is a Go package by [ArdanLabs][ardanlabs] that uses [yzma][yzma] -under the hood to provide hardware accelerated local inference with -[llama.cpp][llama.cpp] directly integrated into your applications. -Kronk provides a high-level API that feels similar to using an OpenAI compatible -API. - -When using the Kronk provider in Fantasy, you only need to specify the model you -want to use and it'll be automatically downloaded in your machine and used for -inference. - -To see which models are available for you, see the [Kronk Catalog][catalog]. - -Examples on how to use it are available in [`examples/kronk`][examples]. - -[kronk]: https://github.com/ardanlabs/kronk -[ardanlabs]: https://github.com/ardanlabs -[yzma]: https://github.com/hybridgroup/yzma -[llama.cpp]: https://github.com/ggml-org/llama.cpp -[catalog]: https://github.com/ardanlabs/kronk_catalogs -[examples]: https://github.com/charmbracelet/fantasy/tree/main/examples/kronk diff --git a/providers/kronk/kronk.go b/providers/kronk/kronk.go deleted file mode 100644 index 8f7c8815a..000000000 --- a/providers/kronk/kronk.go +++ /dev/null @@ -1,156 +0,0 @@ -// Package kronk provides an implementation of the fantasy AI SDK for local -// models using the Kronk SDK. -package kronk - -import ( - "context" - "fmt" - "sync" - - "charm.land/fantasy" - "github.com/ardanlabs/kronk/sdk/kronk" - "github.com/ardanlabs/kronk/sdk/tools/catalog" - "github.com/ardanlabs/kronk/sdk/tools/libs" - "github.com/ardanlabs/kronk/sdk/tools/models" -) - -const ( - // Name is the name of the Kronk provider. - Name = "kronk" -) - -type provider struct { - options options - mu sync.Mutex - kronks map[string]*kronk.Kronk -} - -// New creates a new Kronk provider with the given options. -func New(opts ...Option) (fantasy.Provider, error) { - providerOptions := options{ - languageModelOptions: make([]LanguageModelOption, 0), - } - - for _, o := range opts { - o(&providerOptions) - } - - if providerOptions.name == "" { - providerOptions.name = Name - } - - p := provider{ - options: providerOptions, - kronks: make(map[string]*kronk.Kronk), - } - - return &p, nil -} - -// Name implements fantasy.Provider. -func (p *provider) Name() string { - return p.options.name -} - -// LanguageModel implements fantasy.Provider. -// The modelURL parameter should be a URL to a GGUF model file (e.g., from Hugging Face). -func (p *provider) LanguageModel(ctx context.Context, modelURL string) (fantasy.LanguageModel, error) { - p.mu.Lock() - defer p.mu.Unlock() - - if krn, ok := p.kronks[modelURL]; ok { - opts := append(p.options.languageModelOptions, WithLanguageModelObjectMode(p.options.objectMode)) - return newLanguageModel(modelURL, p.options.name, krn, opts...), nil - } - - mp, err := p.installSystem(ctx, modelURL) - if err != nil { - return nil, fmt.Errorf("failed to install system: %w", err) - } - - krn, err := p.newKronk(mp) - if err != nil { - return nil, fmt.Errorf("failed to create kronk instance: %w", err) - } - - p.kronks[modelURL] = krn - - opts := append(p.options.languageModelOptions, WithLanguageModelObjectMode(p.options.objectMode)) - - return newLanguageModel(modelURL, p.options.name, krn, opts...), nil -} - -// Close unloads all Kronk instances. Call this when done with the provider. -func (p *provider) Close(ctx context.Context) error { - p.mu.Lock() - defer p.mu.Unlock() - - var errs []error - - for url, krn := range p.kronks { - if err := krn.Unload(ctx); err != nil { - errs = append(errs, fmt.Errorf("failed to unload model %s: %w", url, err)) - } - - delete(p.kronks, url) - } - - if len(errs) > 0 { - return errs[0] - } - - return nil -} - -func (p *provider) installSystem(ctx context.Context, modelURL string) (models.Path, error) { - logger := p.options.logger - if logger == nil { - logger = func(context.Context, string, ...any) {} - } - - lbs, err := libs.New() - if err != nil { - return models.Path{}, fmt.Errorf("unable to create libs: %w", err) - } - - if _, err := lbs.Download(ctx, libs.Logger(logger)); err != nil { - return models.Path{}, fmt.Errorf("unable to install llama.cpp: %w", err) - } - - ctlg, err := catalog.New() - if err != nil { - return models.Path{}, fmt.Errorf("unable to create catalog system: %w", err) - } - - if err := ctlg.Download(ctx); err != nil { - return models.Path{}, fmt.Errorf("unable to download catalog: %w", err) - } - - mdls, err := models.New() - if err != nil { - return models.Path{}, fmt.Errorf("unable to create models: %w", err) - } - - mp, err := mdls.Download(ctx, models.Logger(logger), modelURL, "") - if err != nil { - return models.Path{}, fmt.Errorf("unable to install model: %w", err) - } - - return mp, nil -} - -func (p *provider) newKronk(mp models.Path) (*kronk.Kronk, error) { - if err := kronk.Init(); err != nil { - return nil, fmt.Errorf("unable to init kronk: %w", err) - } - - cfg := p.options.modelConfig - cfg.ModelFiles = mp.ModelFiles - - krn, err := kronk.New(cfg) - if err != nil { - return nil, fmt.Errorf("unable to create inference model: %w", err) - } - - return krn, nil -} diff --git a/providers/kronk/language_model.go b/providers/kronk/language_model.go deleted file mode 100644 index dba0adce8..000000000 --- a/providers/kronk/language_model.go +++ /dev/null @@ -1,669 +0,0 @@ -package kronk - -import ( - "context" - "encoding/json" - "errors" - "io" - - "charm.land/fantasy" - "charm.land/fantasy/object" - "github.com/ardanlabs/kronk/sdk/kronk" - "github.com/ardanlabs/kronk/sdk/kronk/model" - xjson "github.com/charmbracelet/x/json" - "github.com/google/uuid" -) - -type languageModel struct { - provider string - modelID string - kronk *kronk.Kronk - objectMode fantasy.ObjectMode - prepareCallFunc LanguageModelPrepareCallFunc - mapFinishReasonFunc LanguageModelMapFinishReasonFunc - toPromptFunc LanguageModelToPromptFunc -} - -// LanguageModelOption is a function that configures a languageModel. -type LanguageModelOption func(*languageModel) - -// WithLanguageModelPrepareCallFunc sets the prepare call function for the language model. -func WithLanguageModelPrepareCallFunc(fn LanguageModelPrepareCallFunc) LanguageModelOption { - return func(l *languageModel) { - l.prepareCallFunc = fn - } -} - -// WithLanguageModelMapFinishReasonFunc sets the map finish reason function for the language model. -func WithLanguageModelMapFinishReasonFunc(fn LanguageModelMapFinishReasonFunc) LanguageModelOption { - return func(l *languageModel) { - l.mapFinishReasonFunc = fn - } -} - -// WithLanguageModelToPromptFunc sets the to prompt function for the language model. -func WithLanguageModelToPromptFunc(fn LanguageModelToPromptFunc) LanguageModelOption { - return func(l *languageModel) { - l.toPromptFunc = fn - } -} - -// WithLanguageModelObjectMode sets the object generation mode. -func WithLanguageModelObjectMode(om fantasy.ObjectMode) LanguageModelOption { - return func(l *languageModel) { - l.objectMode = om - } -} - -func newLanguageModel(modelID string, provider string, krn *kronk.Kronk, opts ...LanguageModelOption) *languageModel { - lm := languageModel{ - modelID: modelID, - provider: provider, - kronk: krn, - objectMode: fantasy.ObjectModeAuto, - prepareCallFunc: DefaultPrepareCallFunc, - mapFinishReasonFunc: DefaultMapFinishReasonFunc, - toPromptFunc: DefaultToPrompt, - } - - for _, o := range opts { - o(&lm) - } - - return &lm -} - -type streamToolCall struct { - id string - name string - arguments string - hasFinished bool -} - -// Model implements fantasy.LanguageModel. -func (l *languageModel) Model() string { - return l.modelID -} - -// Provider implements fantasy.LanguageModel. -func (l *languageModel) Provider() string { - return l.provider -} - -func (l *languageModel) prepareDocument(call fantasy.Call) (model.D, []fantasy.CallWarning, error) { - messages, warnings := l.toPromptFunc(call.Prompt, l.provider, l.modelID) - - if call.TopK != nil { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeUnsupportedSetting, - Setting: "top_k", - }) - } - - d := model.D{ - "messages": messages, - } - - if call.MaxOutputTokens != nil { - d["max_tokens"] = *call.MaxOutputTokens - } - - if call.Temperature != nil { - d["temperature"] = *call.Temperature - } - - if call.TopP != nil { - d["top_p"] = *call.TopP - } - - if call.FrequencyPenalty != nil { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeUnsupportedSetting, - Setting: "frequency_penalty", - Details: "frequency_penalty is not supported by Kronk", - }) - } - - if call.PresencePenalty != nil { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeUnsupportedSetting, - Setting: "presence_penalty", - Details: "presence_penalty is not supported by Kronk", - }) - } - - optionsWarnings, err := l.prepareCallFunc(l, d, call) - if err != nil { - return nil, nil, err - } - - if len(optionsWarnings) > 0 { - warnings = append(warnings, optionsWarnings...) - } - - if len(call.Tools) > 0 { - tools, toolWarnings := toKronkTools(call.Tools) - d["tools"] = tools - warnings = append(warnings, toolWarnings...) - } - - return d, warnings, nil -} - -// Generate implements fantasy.LanguageModel. -func (l *languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) { - d, warnings, err := l.prepareDocument(call) - if err != nil { - return nil, err - } - - ch, err := l.kronk.ChatStreaming(ctx, d) - if err != nil { - return nil, toProviderErr(err) - } - - var lastResponse model.ChatResponse - var fullContent string - - for resp := range ch { - lastResponse = resp - - if len(resp.Choices) > 0 && resp.Choices[0].Delta != nil { - switch resp.Choices[0].FinishReason() { - case model.FinishReasonError: - return nil, &fantasy.Error{Title: "model error", Message: resp.Choices[0].Delta.Content} - - case model.FinishReasonStop, model.FinishReasonTool: - // Final response already contains full accumulated content in Delta.Content, - // so we use it directly instead of continuing to accumulate. - fullContent = resp.Choices[0].Delta.Content - - default: - fullContent += resp.Choices[0].Delta.Content - } - } - } - - if len(lastResponse.Choices) == 0 { - return nil, &fantasy.Error{Title: "no response", Message: "no response generated"} - } - - choice := lastResponse.Choices[0] - var content []fantasy.Content - if choice.Delta != nil { - content = make([]fantasy.Content, 0, 1+len(choice.Delta.ToolCalls)) - } - - if fullContent != "" { - content = append(content, fantasy.TextContent{ - Text: fullContent, - }) - } - - if choice.Delta != nil { - for _, tc := range choice.Delta.ToolCalls { - // Marshal the underlying map directly, not the ToolCallArguments type - // which has a custom MarshalJSON that double-encodes to a JSON string. - argsJSON, _ := json.Marshal(map[string]any(tc.Function.Arguments)) - - content = append(content, fantasy.ToolCallContent{ - ProviderExecuted: false, - ToolCallID: tc.ID, - ToolName: tc.Function.Name, - Input: string(argsJSON), - }) - } - } - - usage := fantasy.Usage{} - if lastResponse.Usage != nil { - usage = fantasy.Usage{ - InputTokens: int64(lastResponse.Usage.PromptTokens), - OutputTokens: int64(lastResponse.Usage.CompletionTokens), - TotalTokens: int64(lastResponse.Usage.PromptTokens + lastResponse.Usage.CompletionTokens), - ReasoningTokens: int64(lastResponse.Usage.ReasoningTokens), - } - } - - mappedFinishReason := l.mapFinishReasonFunc(choice.FinishReason()) - if choice.Delta != nil && len(choice.Delta.ToolCalls) > 0 { - mappedFinishReason = fantasy.FinishReasonToolCalls - } - - providerMetadata := fantasy.ProviderMetadata{} - if lastResponse.Usage != nil { - providerMetadata = fantasy.ProviderMetadata{ - Name: &ProviderMetadata{ - TokensPerSecond: lastResponse.Usage.TokensPerSecond, - OutputTokens: int64(lastResponse.Usage.OutputTokens), - }, - } - } - - resp := fantasy.Response{ - Content: content, - Usage: usage, - FinishReason: mappedFinishReason, - ProviderMetadata: providerMetadata, - Warnings: warnings, - } - - return &resp, nil -} - -// Stream implements fantasy.LanguageModel. -func (l *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) { - d, warnings, err := l.prepareDocument(call) - if err != nil { - return nil, err - } - - ch, err := l.kronk.ChatStreaming(ctx, d) - if err != nil { - return nil, toProviderErr(err) - } - - isActiveText := false - isActiveReasoning := false - toolCalls := make(map[int]streamToolCall) - - providerMetadata := fantasy.ProviderMetadata{ - Name: &ProviderMetadata{}, - } - - var usage fantasy.Usage - var finishReason string - - return func(yield func(fantasy.StreamPart) bool) { - if len(warnings) > 0 { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeWarnings, - Warnings: warnings, - }) { - return - } - } - - toolIndex := 0 - for resp := range ch { - if len(resp.Choices) == 0 { - continue - } - - choice := resp.Choices[0] - if choice.Delta == nil { - continue - } - - if resp.Usage != nil { - usage = fantasy.Usage{ - InputTokens: int64(resp.Usage.PromptTokens), - OutputTokens: int64(resp.Usage.CompletionTokens), - TotalTokens: int64(resp.Usage.PromptTokens + resp.Usage.CompletionTokens), - ReasoningTokens: int64(resp.Usage.ReasoningTokens), - } - - if pm, ok := providerMetadata[Name]; ok { - if metadata, ok := pm.(*ProviderMetadata); ok { - metadata.TokensPerSecond = resp.Usage.TokensPerSecond - metadata.OutputTokens = int64(resp.Usage.OutputTokens) - } - } - } - - if choice.FinishReason() != "" { - finishReason = choice.FinishReason() - } - - switch choice.FinishReason() { - case model.FinishReasonError: - yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeError, - Error: &fantasy.Error{Title: "model error", Message: choice.Delta.Content}, - }) - return - - case model.FinishReasonTool: - if isActiveReasoning { - isActiveReasoning = false - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningEnd, - ID: "reasoning-0", - }) { - return - } - } - - if isActiveText { - isActiveText = false - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextEnd, - ID: "0", - }) { - return - } - } - - for _, tc := range choice.Delta.ToolCalls { - argsJSON, _ := json.Marshal(map[string]any(tc.Function.Arguments)) - argsStr := string(argsJSON) - - toolID := tc.ID - if toolID == "" { - toolID = uuid.NewString() - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputStart, - ID: toolID, - ToolCallName: tc.Function.Name, - }) { - return - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputDelta, - ID: toolID, - Delta: argsStr, - }) { - return - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputEnd, - ID: toolID, - }) { - return - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolCall, - ID: toolID, - ToolCallName: tc.Function.Name, - ToolCallInput: argsStr, - }) { - return - } - - toolCalls[toolIndex] = streamToolCall{ - id: toolID, - name: tc.Function.Name, - arguments: argsStr, - hasFinished: true, - } - toolIndex++ - } - - default: - if choice.Delta.Reasoning != "" { - if !isActiveReasoning { - isActiveReasoning = true - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningStart, - ID: "reasoning-0", - }) { - return - } - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningDelta, - ID: "reasoning-0", - Delta: choice.Delta.Reasoning, - }) { - return - } - } - - hasToolCalls := len(choice.Delta.ToolCalls) > 0 - hasContent := choice.Delta.Content != "" - - if isActiveReasoning && (hasContent || hasToolCalls) { - isActiveReasoning = false - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningEnd, - ID: "reasoning-0", - }) { - return - } - } - - if hasContent { - if !isActiveText { - isActiveText = true - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextStart, - ID: "0", - }) { - return - } - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextDelta, - ID: "0", - Delta: choice.Delta.Content, - }) { - return - } - } - - if hasToolCalls && isActiveText { - isActiveText = false - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextEnd, - ID: "0", - }) { - return - } - } - - for _, tc := range choice.Delta.ToolCalls { - argsJSON, _ := json.Marshal(map[string]any(tc.Function.Arguments)) - argsStr := string(argsJSON) - - switch existingTC, ok := toolCalls[toolIndex]; ok { - case true: - if existingTC.hasFinished { - continue - } - - existingTC.arguments += argsStr - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputDelta, - ID: existingTC.id, - Delta: argsStr, - }) { - return - } - - toolCalls[toolIndex] = existingTC - - if xjson.IsValid(existingTC.arguments) { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputEnd, - ID: existingTC.id, - }) { - return - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolCall, - ID: existingTC.id, - ToolCallName: existingTC.name, - ToolCallInput: existingTC.arguments, - }) { - return - } - - existingTC.hasFinished = true - toolCalls[toolIndex] = existingTC - } - - case false: - toolID := tc.ID - if toolID == "" { - toolID = uuid.NewString() - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputStart, - ID: toolID, - ToolCallName: tc.Function.Name, - }) { - return - } - - toolCalls[toolIndex] = streamToolCall{ - id: toolID, - name: tc.Function.Name, - arguments: argsStr, - } - - if argsStr != "" && argsStr != "null" { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputDelta, - ID: toolID, - Delta: argsStr, - }) { - return - } - - if xjson.IsValid(argsStr) { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolInputEnd, - ID: toolID, - }) { - return - } - - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeToolCall, - ID: toolID, - ToolCallName: tc.Function.Name, - ToolCallInput: argsStr, - }) { - return - } - - stc := toolCalls[toolIndex] - stc.hasFinished = true - toolCalls[toolIndex] = stc - } - } - - toolIndex++ - } - } - } - } - - if isActiveReasoning { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningEnd, - ID: "reasoning-0", - }) { - return - } - } - - if isActiveText { - if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeTextEnd, - ID: "0", - }) { - return - } - } - - mappedFinishReason := l.mapFinishReasonFunc(finishReason) - if len(toolCalls) > 0 { - mappedFinishReason = fantasy.FinishReasonToolCalls - } - - yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeFinish, - Usage: usage, - FinishReason: mappedFinishReason, - ProviderMetadata: providerMetadata, - }) - }, nil -} - -// GenerateObject implements fantasy.LanguageModel. -func (l *languageModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) { - switch l.objectMode { - case fantasy.ObjectModeText: - return object.GenerateWithText(ctx, l, call) - - case fantasy.ObjectModeTool: - return object.GenerateWithTool(ctx, l, call) - - default: - return object.GenerateWithTool(ctx, l, call) - } -} - -// StreamObject implements fantasy.LanguageModel. -func (l *languageModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) { - switch l.objectMode { - case fantasy.ObjectModeTool: - return object.StreamWithTool(ctx, l, call) - - case fantasy.ObjectModeText: - return object.StreamWithText(ctx, l, call) - - default: - return object.StreamWithTool(ctx, l, call) - } -} - -func toKronkTools(tools []fantasy.Tool) ([]model.D, []fantasy.CallWarning) { - var kronkTools []model.D - var warnings []fantasy.CallWarning - - for _, tool := range tools { - if tool.GetType() == fantasy.ToolTypeFunction { - ft, ok := tool.(fantasy.FunctionTool) - if !ok { - continue - } - - kronkTools = append(kronkTools, model.D{ - "type": "function", - "function": model.D{ - "name": ft.Name, - "description": ft.Description, - "parameters": ft.InputSchema, - }, - }) - - continue - } - - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeUnsupportedTool, - Tool: tool, - Message: "tool is not supported", - }) - } - - return kronkTools, warnings -} - -func toProviderErr(err error) error { - if err == nil { - return nil - } - - if errors.Is(err, io.EOF) { - return nil - } - - return &fantasy.ProviderError{ - Title: "kronk error", - Message: err.Error(), - Cause: err, - } -} diff --git a/providers/kronk/language_model_hooks.go b/providers/kronk/language_model_hooks.go deleted file mode 100644 index a824f791d..000000000 --- a/providers/kronk/language_model_hooks.go +++ /dev/null @@ -1,269 +0,0 @@ -package kronk - -import ( - "encoding/base64" - "fmt" - "strings" - - "charm.land/fantasy" - "github.com/ardanlabs/kronk/sdk/kronk/model" -) - -// LanguageModelPrepareCallFunc is a function that prepares the call for the language model. -type LanguageModelPrepareCallFunc func(lm fantasy.LanguageModel, d model.D, call fantasy.Call) ([]fantasy.CallWarning, error) - -// LanguageModelMapFinishReasonFunc is a function that maps the finish reason for the language model. -type LanguageModelMapFinishReasonFunc func(finishReason string) fantasy.FinishReason - -// LanguageModelToPromptFunc is a function that handles converting fantasy prompts to Kronk SDK messages. -type LanguageModelToPromptFunc func(prompt fantasy.Prompt, provider, modelID string) ([]model.D, []fantasy.CallWarning) - -// DefaultPrepareCallFunc is the default implementation for preparing a call to the language model. -func DefaultPrepareCallFunc(_ fantasy.LanguageModel, d model.D, call fantasy.Call) ([]fantasy.CallWarning, error) { - if call.ProviderOptions == nil { - return nil, nil - } - - var warnings []fantasy.CallWarning - providerOptions := &ProviderOptions{} - if v, ok := call.ProviderOptions[Name]; ok { - providerOptions, ok = v.(*ProviderOptions) - if !ok { - return nil, &fantasy.Error{Title: "invalid argument", Message: "kronk provider options should be *kronk.ProviderOptions"} - } - } - - if providerOptions.TopK != nil { - d["top_k"] = *providerOptions.TopK - } - - if providerOptions.RepeatPenalty != nil { - d["repeat_penalty"] = *providerOptions.RepeatPenalty - } - - if providerOptions.Seed != nil { - d["seed"] = *providerOptions.Seed - } - - if providerOptions.MinP != nil { - d["min_p"] = *providerOptions.MinP - } - - if providerOptions.NumPredict != nil { - d["num_predict"] = *providerOptions.NumPredict - } - - if providerOptions.Stop != nil { - d["stop"] = providerOptions.Stop - } - - return warnings, nil -} - -// DefaultMapFinishReasonFunc is the default implementation for mapping finish reasons. -func DefaultMapFinishReasonFunc(finishReason string) fantasy.FinishReason { - switch finishReason { - case string(model.FinishReasonStop): - return fantasy.FinishReasonStop - - case string(model.FinishReasonTool): - return fantasy.FinishReasonToolCalls - - case string(model.FinishReasonError): - return fantasy.FinishReasonError - - default: - return fantasy.FinishReasonUnknown - } -} - -// DefaultToPrompt is the default implementation for converting fantasy prompts to Kronk SDK messages. -func DefaultToPrompt(prompt fantasy.Prompt, _ string, _ string) ([]model.D, []fantasy.CallWarning) { - var messages []model.D - var warnings []fantasy.CallWarning - - for _, msg := range prompt { - switch msg.Role { - case fantasy.MessageRoleSystem: - for _, c := range msg.Content { - if c.GetType() == fantasy.ContentTypeText { - textPart, ok := fantasy.AsMessagePart[fantasy.TextPart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "system message text part does not have the right type", - }) - - continue - } - - messages = append(messages, model.TextMessage(model.RoleSystem, textPart.Text)) - } - } - - case fantasy.MessageRoleUser: - var content []model.D - for _, c := range msg.Content { - switch c.GetType() { - case fantasy.ContentTypeText: - textPart, ok := fantasy.AsMessagePart[fantasy.TextPart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "user message text part does not have the right type", - }) - - continue - } - - content = append(content, model.D{ - "type": "text", - "text": textPart.Text, - }) - - case fantasy.ContentTypeFile: - filePart, ok := fantasy.AsMessagePart[fantasy.FilePart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "user message file part does not have the right type", - }) - - continue - } - - switch { - case strings.HasPrefix(filePart.MediaType, "image/"): - base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data) - data := "data:" + filePart.MediaType + ";base64," + base64Encoded - content = append(content, model.D{ - "type": "image_url", - "image_url": model.D{ - "url": data, - }, - }) - - default: - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: fmt.Sprintf("file part media type %s not supported", filePart.MediaType), - }) - } - } - } - - switch { - case len(content) == 1 && content[0]["type"] == "text": - messages = append(messages, model.TextMessage(model.RoleUser, content[0]["text"].(string))) - - case len(content) > 0: - messages = append(messages, model.D{ - "role": model.RoleUser, - "content": content, - }) - } - - case fantasy.MessageRoleAssistant: - var textContent string - var toolCalls []model.D - - for _, c := range msg.Content { - switch c.GetType() { - case fantasy.ContentTypeText: - textPart, ok := fantasy.AsMessagePart[fantasy.TextPart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "assistant message text part does not have the right type", - }) - - continue - } - - textContent += textPart.Text - - case fantasy.ContentTypeToolCall: - toolCallPart, ok := fantasy.AsMessagePart[fantasy.ToolCallPart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "assistant message tool part does not have the right type", - }) - - continue - } - - toolCalls = append(toolCalls, model.D{ - "id": toolCallPart.ToolCallID, - "type": "function", - "function": model.D{ - "name": toolCallPart.ToolName, - "arguments": toolCallPart.Input, - }, - }) - } - } - - assistantMsg := model.D{ - "role": model.RoleAssistant, - } - - if textContent != "" { - assistantMsg["content"] = textContent - } - - if len(toolCalls) > 0 { - assistantMsg["tool_calls"] = toolCalls - } - - if textContent != "" || len(toolCalls) > 0 { - messages = append(messages, assistantMsg) - } - - case fantasy.MessageRoleTool: - for _, c := range msg.Content { - if c.GetType() != fantasy.ContentTypeToolResult { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "tool message can only have tool result content", - }) - - continue - } - - toolResultPart, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](c) - if !ok { - warnings = append(warnings, fantasy.CallWarning{ - Type: fantasy.CallWarningTypeOther, - Message: "tool message result part does not have the right type", - }) - - continue - } - - var resultContent string - switch toolResultPart.Output.GetType() { - case fantasy.ToolResultContentTypeText: - output, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](toolResultPart.Output) - if ok { - resultContent = output.Text - } - - case fantasy.ToolResultContentTypeError: - output, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentError](toolResultPart.Output) - if ok { - resultContent = output.Error.Error() - } - } - - messages = append(messages, model.D{ - "role": "tool", - "content": resultContent, - "tool_call_id": toolResultPart.ToolCallID, - }) - } - } - } - - return messages, warnings -} diff --git a/providers/kronk/options.go b/providers/kronk/options.go deleted file mode 100644 index 747920465..000000000 --- a/providers/kronk/options.go +++ /dev/null @@ -1,71 +0,0 @@ -package kronk - -import ( - "context" - "fmt" - - "charm.land/fantasy" - "github.com/ardanlabs/kronk/sdk/kronk/model" -) - -// Option defines a function that configures Kronk provider options. -type Option func(*options) - -// Logger is the function signature for logging download progress. -type Logger func(ctx context.Context, msg string, args ...any) - -type options struct { - name string - modelConfig model.Config - logger Logger - objectMode fantasy.ObjectMode - languageModelOptions []LanguageModelOption -} - -// WithName sets the name for the Kronk provider. -func WithName(name string) Option { - return func(o *options) { - o.name = name - } -} - -// WithModelConfig sets additional model configuration options. -func WithModelConfig(cfg model.Config) Option { - return func(o *options) { - o.modelConfig = cfg - } -} - -// WithLogger sets the logger function for download progress. -func WithLogger(logger Logger) Option { - return func(o *options) { - o.logger = logger - } -} - -// WithLanguageModelOptions sets the language model options for the Kronk provider. -func WithLanguageModelOptions(opts ...LanguageModelOption) Option { - return func(o *options) { - o.languageModelOptions = append(o.languageModelOptions, opts...) - } -} - -// WithObjectMode sets the object generation mode. -func WithObjectMode(om fantasy.ObjectMode) Option { - return func(o *options) { - o.objectMode = om - } -} - -// FmtLogger is a simple logger that prints to stdout using fmt.Printf. -func FmtLogger(_ context.Context, msg string, args ...any) { - fmt.Printf("%s:", msg) - - for i := 0; i < len(args); i += 2 { - if i+1 < len(args) { - fmt.Printf(" %v[%v]", args[i], args[i+1]) - } - } - - fmt.Println() -} diff --git a/providers/kronk/provider_options.go b/providers/kronk/provider_options.go deleted file mode 100644 index 217242ea4..000000000 --- a/providers/kronk/provider_options.go +++ /dev/null @@ -1,104 +0,0 @@ -package kronk - -import ( - "encoding/json" - - "charm.land/fantasy" -) - -// Global type identifiers for Kronk-specific provider data. -const ( - TypeProviderOptions = Name + ".options" - TypeProviderMetadata = Name + ".metadata" -) - -// Register Kronk provider-specific types with the global registry. -func init() { - fantasy.RegisterProviderType(TypeProviderOptions, func(data []byte) (fantasy.ProviderOptionsData, error) { - var v ProviderOptions - if err := json.Unmarshal(data, &v); err != nil { - return nil, err - } - return &v, nil - }) - - fantasy.RegisterProviderType(TypeProviderMetadata, func(data []byte) (fantasy.ProviderOptionsData, error) { - var v ProviderMetadata - if err := json.Unmarshal(data, &v); err != nil { - return nil, err - } - return &v, nil - }) -} - -// ProviderMetadata represents additional metadata from Kronk provider. -type ProviderMetadata struct { - TokensPerSecond float64 `json:"tokens_per_second"` - OutputTokens int64 `json:"output_tokens"` -} - -// Options implements the ProviderOptionsData interface. -func (*ProviderMetadata) Options() {} - -// MarshalJSON implements custom JSON marshaling with type info for ProviderMetadata. -func (m ProviderMetadata) MarshalJSON() ([]byte, error) { - type plain ProviderMetadata - return fantasy.MarshalProviderType(TypeProviderMetadata, plain(m)) -} - -// UnmarshalJSON implements custom JSON unmarshaling with type info for ProviderMetadata. -func (m *ProviderMetadata) UnmarshalJSON(data []byte) error { - type plain ProviderMetadata - var p plain - if err := fantasy.UnmarshalProviderType(data, &p); err != nil { - return err - } - *m = ProviderMetadata(p) - return nil -} - -// ProviderOptions represents additional options for Kronk provider. -type ProviderOptions struct { - TopK *int64 `json:"top_k"` - RepeatPenalty *float64 `json:"repeat_penalty"` - Seed *int64 `json:"seed"` - MinP *float64 `json:"min_p"` - NumPredict *int64 `json:"num_predict"` - Stop []string `json:"stop"` -} - -// Options implements the ProviderOptionsData interface. -func (*ProviderOptions) Options() {} - -// MarshalJSON implements custom JSON marshaling with type info for ProviderOptions. -func (o ProviderOptions) MarshalJSON() ([]byte, error) { - type plain ProviderOptions - return fantasy.MarshalProviderType(TypeProviderOptions, plain(o)) -} - -// UnmarshalJSON implements custom JSON unmarshaling with type info for ProviderOptions. -func (o *ProviderOptions) UnmarshalJSON(data []byte) error { - type plain ProviderOptions - var p plain - if err := fantasy.UnmarshalProviderType(data, &p); err != nil { - return err - } - *o = ProviderOptions(p) - return nil -} - -// NewProviderOptions creates new provider options for Kronk. -func NewProviderOptions(opts *ProviderOptions) fantasy.ProviderOptions { - return fantasy.ProviderOptions{ - Name: opts, - } -} - -// ParseOptions parses provider options from a map. -func ParseOptions(data map[string]any) (*ProviderOptions, error) { - var options ProviderOptions - if err := fantasy.ParseOptions(data, &options); err != nil { - return nil, err - } - return &options, nil -} diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 254ae6354..07bcdc981 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -947,7 +947,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - LogProbs: new(true), + LogProbs: fantasy.Opt(true), }), }) @@ -1068,8 +1068,8 @@ func TestDoGenerate(t *testing.T) { LogitBias: map[string]int64{ "50256": -100, }, - ParallelToolCalls: new(false), - User: new("test-user-id"), + ParallelToolCalls: fantasy.Opt(false), + User: fantasy.Opt("test-user-id"), }), }) @@ -1109,7 +1109,7 @@ func TestDoGenerate(t *testing.T) { Prompt: testPrompt, ProviderOptions: NewProviderOptions( &ProviderOptions{ - ReasoningEffort: new(ReasoningEffortLow), + ReasoningEffort: ReasoningEffortOption(ReasoningEffortLow), }, ), }) @@ -1149,7 +1149,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - TextVerbosity: new("low"), + TextVerbosity: fantasy.Opt("low"), }), }) @@ -1610,7 +1610,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - MaxCompletionTokens: new(int64(255)), + MaxCompletionTokens: fantasy.Opt(int64(255)), }), }) @@ -1694,7 +1694,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - Store: new(true), + Store: fantasy.Opt(true), }), }) @@ -1776,7 +1776,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - PromptCacheKey: new("test-cache-key-123"), + PromptCacheKey: fantasy.Opt("test-cache-key-123"), }), }) @@ -1815,7 +1815,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - SafetyIdentifier: new("test-safety-identifier-123"), + SafetyIdentifier: fantasy.Opt("test-safety-identifier-123"), }), }) @@ -1887,7 +1887,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("flex"), + ServiceTier: fantasy.Opt("flex"), }), }) @@ -1924,7 +1924,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("flex"), + ServiceTier: fantasy.Opt("flex"), }), }) @@ -1958,7 +1958,7 @@ func TestDoGenerate(t *testing.T) { _, err = model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("priority"), + ServiceTier: fantasy.Opt("priority"), }), }) @@ -1995,7 +1995,7 @@ func TestDoGenerate(t *testing.T) { result, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("priority"), + ServiceTier: fantasy.Opt("priority"), }), }) @@ -2752,7 +2752,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - Store: new(true), + Store: fantasy.Opt(true), }), }) @@ -2842,7 +2842,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("flex"), + ServiceTier: fantasy.Opt("flex"), }), }) @@ -2885,7 +2885,7 @@ func TestDoStream(t *testing.T) { _, err = model.Stream(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: NewProviderOptions(&ProviderOptions{ - ServiceTier: new("priority"), + ServiceTier: fantasy.Opt("priority"), }), }) @@ -3686,7 +3686,7 @@ func TestResponsesGenerate_StoreOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: new(true), + Store: fantasy.Opt(true), }, }, }) @@ -3710,8 +3710,8 @@ func TestResponsesGenerate_PreviousResponseIDOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - PreviousResponseID: new("resp_prev_123"), - Store: new(true), + PreviousResponseID: fantasy.Opt("resp_prev_123"), + Store: fantasy.Opt(true), }, }, }) @@ -3758,7 +3758,7 @@ func TestResponsesGenerate_StateChainingAcrossTurns(t *testing.T) { first, err := model.Generate(context.Background(), fantasy.Call{ Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ - Name: &ResponsesProviderOptions{Store: new(true)}, + Name: &ResponsesProviderOptions{Store: fantasy.Opt(true)}, }, }) require.NoError(t, err) @@ -3799,7 +3799,7 @@ func TestResponsesGenerate_StateChainingAcrossTurns(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: new(true), + Store: fantasy.Opt(true), PreviousResponseID: &meta.ResponseID, }, }, @@ -4164,7 +4164,7 @@ func TestResponsesStream_StoreOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - Store: new(true), + Store: fantasy.Opt(true), }, }, }) @@ -4197,8 +4197,8 @@ func TestResponsesStream_PreviousResponseIDOption(t *testing.T) { Prompt: testPrompt, ProviderOptions: fantasy.ProviderOptions{ Name: &ResponsesProviderOptions{ - PreviousResponseID: new("resp_prev_456"), - Store: new(true), + PreviousResponseID: fantasy.Opt("resp_prev_456"), + Store: fantasy.Opt(true), }, }, }) diff --git a/providers/openai/provider_options.go b/providers/openai/provider_options.go index 0e5e8336f..27a64a6ef 100644 --- a/providers/openai/provider_options.go +++ b/providers/openai/provider_options.go @@ -150,10 +150,8 @@ func (o *ProviderFileOptions) UnmarshalJSON(data []byte) error { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value. -// -//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return new(e) + return &e } // NewProviderOptions creates new provider options for OpenAI. diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index bd61a68ba..eb027109e 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -1090,8 +1090,8 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( case "response.output_text.annotation.added": added := event.AsResponseOutputTextAnnotationAdded() // The Annotation field is typed as `any` in the SDK; - // it deserializes as map[string]any from JSON. - annotationMap, ok := added.Annotation.(map[string]any) + // it deserializes as map[string]interface{} from JSON. + annotationMap, ok := added.Annotation.(map[string]interface{}) if !ok { break } diff --git a/providers/openai/responses_params_test.go b/providers/openai/responses_params_test.go index f533c0bae..2687f1db5 100644 --- a/providers/openai/responses_params_test.go +++ b/providers/openai/responses_params_test.go @@ -21,12 +21,12 @@ func TestPrepareParams_Store(t *testing.T) { }{ { name: "store true", - opts: &ResponsesProviderOptions{Store: new(true)}, + opts: &ResponsesProviderOptions{Store: fantasy.Opt(true)}, wantStore: true, }, { name: "store false", - opts: &ResponsesProviderOptions{Store: new(false)}, + opts: &ResponsesProviderOptions{Store: fantasy.Opt(false)}, wantStore: false, }, { @@ -42,6 +42,7 @@ func TestPrepareParams_Store(t *testing.T) { } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() @@ -64,8 +65,8 @@ func TestPrepareParams_PreviousResponseID(t *testing.T) { t.Parallel() params, warnings, err := lm.prepareParams(testCall(prompt, &ResponsesProviderOptions{ - PreviousResponseID: new("resp_abc123"), - Store: new(true), + PreviousResponseID: fantasy.Opt("resp_abc123"), + Store: fantasy.Opt(true), })) require.NoError(t, err) require.Empty(t, warnings) @@ -86,7 +87,7 @@ func TestPrepareParams_PreviousResponseID(t *testing.T) { t.Parallel() params, warnings, err := lm.prepareParams(testCall(prompt, &ResponsesProviderOptions{ - PreviousResponseID: new(""), + PreviousResponseID: fantasy.Opt(""), })) require.NoError(t, err) require.Empty(t, warnings) @@ -99,8 +100,8 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { lm := testResponsesLM() opts := &ResponsesProviderOptions{ - PreviousResponseID: new("resp_abc123"), - Store: new(true), + PreviousResponseID: fantasy.Opt("resp_abc123"), + Store: fantasy.Opt(true), } t.Run("rejects with assistant messages", func(t *testing.T) { @@ -151,7 +152,7 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { _, _, err := lm.prepareParams(testCall(fantasy.Prompt{ testTextMessage(fantasy.MessageRoleUser, "hello"), }, &ResponsesProviderOptions{ - PreviousResponseID: new("resp_abc123"), + PreviousResponseID: fantasy.Opt("resp_abc123"), })) require.EqualError(t, err, previousResponseIDStoreError) }) @@ -162,8 +163,8 @@ func TestPrepareParams_PreviousResponseID_Validation(t *testing.T) { _, _, err := lm.prepareParams(testCall(fantasy.Prompt{ testTextMessage(fantasy.MessageRoleUser, "hello"), }, &ResponsesProviderOptions{ - PreviousResponseID: new("resp_abc123"), - Store: new(false), + PreviousResponseID: fantasy.Opt("resp_abc123"), + Store: fantasy.Opt(false), })) require.EqualError(t, err, previousResponseIDStoreError) }) @@ -222,6 +223,7 @@ func TestValidatePreviousResponseIDPrompt(t *testing.T) { } for _, tt := range tests { + tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() diff --git a/providers/openrouter/provider_options.go b/providers/openrouter/provider_options.go index 5ef7f9dd4..a97a2658c 100644 --- a/providers/openrouter/provider_options.go +++ b/providers/openrouter/provider_options.go @@ -195,10 +195,8 @@ type ReasoningData struct { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value for OpenRouter. -// -//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return new(e) + return &e } // NewProviderOptions creates new provider options for OpenRouter. diff --git a/providers/vercel/provider_options.go b/providers/vercel/provider_options.go index 163921b97..046ba940d 100644 --- a/providers/vercel/provider_options.go +++ b/providers/vercel/provider_options.go @@ -170,10 +170,8 @@ type ReasoningData struct { } // ReasoningEffortOption creates a pointer to a ReasoningEffort value. -// -//go:fix inline func ReasoningEffortOption(e ReasoningEffort) *ReasoningEffort { - return new(e) + return &e } // NewProviderOptions creates new provider options for Vercel. diff --git a/providertests/anthropic_test.go b/providertests/anthropic_test.go index f0ee72667..940ec477d 100644 --- a/providertests/anthropic_test.go +++ b/providertests/anthropic_test.go @@ -177,7 +177,7 @@ func TestAnthropicWebSearch(t *testing.T) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) @@ -222,7 +222,7 @@ func TestAnthropicWebSearch(t *testing.T) { // Turn 1: initial query triggers web search. result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) @@ -266,7 +266,7 @@ func TestAnthropicWebSearch(t *testing.T) { result2, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Messages: history, Prompt: "How does that compare to Osaka?", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) diff --git a/providertests/azure_responses_test.go b/providertests/azure_responses_test.go index b7c89084b..8b3945ba4 100644 --- a/providertests/azure_responses_test.go +++ b/providertests/azure_responses_test.go @@ -47,7 +47,7 @@ func TestAzureResponsesWithSummaryThinking(t *testing.T) { openai.IncludeReasoningEncryptedContent, }, ReasoningEffort: openai.ReasoningEffortOption(openai.ReasoningEffortHigh), - ReasoningSummary: new("auto"), + ReasoningSummary: fantasy.Opt("auto"), }, } var pairs []builderPair diff --git a/providertests/common_test.go b/providertests/common_test.go index f13c93a92..6878761ff 100644 --- a/providertests/common_test.go +++ b/providertests/common_test.go @@ -70,7 +70,7 @@ func testSimple(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "Say hi in Portuguese", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -90,7 +90,7 @@ func testSimple(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "Say hi in Portuguese", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -149,7 +149,7 @@ func testTool(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What's the weather in Florence,Italy?", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -170,7 +170,7 @@ func testTool(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What's the weather in Florence,Italy?", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -255,7 +255,7 @@ func testMultiTool(t *testing.T, pair builderPair) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "Add and multiply the number 2 and 3", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") @@ -277,7 +277,7 @@ func testMultiTool(t *testing.T, pair builderPair) { result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "Add and multiply the number 2 and 3", ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), PrepareStep: pair.prepareStep, }) require.NoError(t, err, "failed to generate") diff --git a/providertests/google_test.go b/providertests/google_test.go index cbd9fec8b..d49e13a2a 100644 --- a/providertests/google_test.go +++ b/providertests/google_test.go @@ -41,8 +41,8 @@ func TestGoogleThinking(t *testing.T) { gemini2Opts := fantasy.ProviderOptions{ google.Name: &google.ProviderOptions{ ThinkingConfig: &google.ThinkingConfig{ - ThinkingBudget: new(int64(100)), - IncludeThoughts: new(true), + ThinkingBudget: fantasy.Opt(int64(100)), + IncludeThoughts: fantasy.Opt(true), }, }, } @@ -50,7 +50,7 @@ func TestGoogleThinking(t *testing.T) { google.Name: &google.ProviderOptions{ ThinkingConfig: &google.ThinkingConfig{ ThinkingLevel: fantasy.Opt(google.ThinkingLevelHigh), - IncludeThoughts: new(true), + IncludeThoughts: fantasy.Opt(true), }, }, } diff --git a/providertests/image_upload_test.go b/providertests/image_upload_test.go index 5ec3ea4f3..cf7fad7ca 100644 --- a/providertests/image_upload_test.go +++ b/providertests/image_upload_test.go @@ -90,7 +90,7 @@ func TestImageUploadAgent(t *testing.T) { Prompt: "Describe the image briefly in English.", Files: []fantasy.FilePart{file}, ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) got := result.Response.Content.Text() @@ -136,7 +136,7 @@ func TestImageUploadAgentStreaming(t *testing.T) { Prompt: "Describe the image briefly in English.", Files: []fantasy.FilePart{file}, ProviderOptions: pair.providerOptions, - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) got := result.Response.Content.Text() diff --git a/providertests/object_test.go b/providertests/object_test.go index 5a4c17e59..f5e9b791e 100644 --- a/providertests/object_test.go +++ b/providertests/object_test.go @@ -104,7 +104,7 @@ func testSimpleObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Person", SchemaDescription: "A person with name, age, and city", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to generate object") @@ -127,7 +127,7 @@ func testSimpleObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Person", SchemaDescription: "A person with name, age, and city", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to create object stream") @@ -277,7 +277,7 @@ func testComplexObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Book", SchemaDescription: "A book with title, author, genres, and publication year", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to generate object") @@ -300,7 +300,7 @@ func testComplexObject(t *testing.T, pair builderPair) { Schema: schema, SchemaName: "Book", SchemaDescription: "A book with title, author, genres, and publication year", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), ProviderOptions: pair.providerOptions, }) require.NoError(t, err, "failed to create object stream") diff --git a/providertests/openai_responses_test.go b/providertests/openai_responses_test.go index 38ad7ea7a..db85f73d4 100644 --- a/providertests/openai_responses_test.go +++ b/providertests/openai_responses_test.go @@ -40,7 +40,7 @@ func TestOpenAIResponsesWithSummaryThinking(t *testing.T) { openai.IncludeReasoningEncryptedContent, }, ReasoningEffort: openai.ReasoningEffortOption(openai.ReasoningEffortHigh), - ReasoningSummary: new("auto"), + ReasoningSummary: fantasy.Opt("auto"), }, } var pairs []builderPair diff --git a/providertests/openai_web_search_test.go b/providertests/openai_web_search_test.go index 8e8eb50e2..1fe4418fa 100644 --- a/providertests/openai_web_search_test.go +++ b/providertests/openai_web_search_test.go @@ -47,7 +47,7 @@ func TestOpenAIWebSearch(t *testing.T) { result, err := agent.Generate(t.Context(), fantasy.AgentCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) @@ -96,7 +96,7 @@ func TestOpenAIWebSearch(t *testing.T) { // Turn 1: initial query triggers web search. result, err := agent.Stream(t.Context(), fantasy.AgentStreamCall{ Prompt: "What is the current population of Tokyo? Cite your source.", - MaxOutputTokens: new(int64(4000)), + MaxOutputTokens: fantasy.Opt(int64(4000)), }) require.NoError(t, err) diff --git a/providertests/provider_registry_test.go b/providertests/provider_registry_test.go index c0f3f848e..9340e50b6 100644 --- a/providertests/provider_registry_test.go +++ b/providertests/provider_registry_test.go @@ -20,7 +20,7 @@ func TestProviderRegistry_Serialization_OpenAIOptions(t *testing.T) { fantasy.TextPart{Text: "hi"}, }, ProviderOptions: fantasy.ProviderOptions{ - openai.Name: &openai.ProviderOptions{User: new("tester")}, + openai.Name: &openai.ProviderOptions{User: fantasy.Opt("tester")}, }, } @@ -60,8 +60,8 @@ func TestProviderRegistry_Serialization_OpenAIResponses(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ openai.Name: &openai.ResponsesProviderOptions{ - PromptCacheKey: new("cache-key-1"), - ParallelToolCalls: new(true), + PromptCacheKey: fantasy.Opt("cache-key-1"), + ParallelToolCalls: fantasy.Opt(true), }, }, } @@ -215,7 +215,7 @@ func TestProviderRegistry_Serialization_OpenRouterOptions(t *testing.T) { ProviderOptions: fantasy.ProviderOptions{ openrouter.Name: &openrouter.ProviderOptions{ IncludeUsage: &includeUsage, - User: new("test-user"), + User: fantasy.Opt("test-user"), }, }, } @@ -245,7 +245,7 @@ func TestProviderRegistry_Serialization_OpenAICompatOptions(t *testing.T) { }, ProviderOptions: fantasy.ProviderOptions{ openaicompat.Name: &openaicompat.ProviderOptions{ - User: new("test-user"), + User: fantasy.Opt("test-user"), ReasoningEffort: &effort, }, }, @@ -276,7 +276,7 @@ func TestProviderRegistry_MultiProvider(t *testing.T) { fantasy.TextPart{Text: "test"}, }, ProviderOptions: fantasy.ProviderOptions{ - openai.Name: &openai.ProviderOptions{User: new("user1")}, + openai.Name: &openai.ProviderOptions{User: fantasy.Opt("user1")}, anthropic.Name: &anthropic.ProviderOptions{ SendReasoning: &sendReasoning, }, diff --git a/schema/schema.go b/schema/schema.go index 92ccd7b34..c1cc46d2b 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -122,8 +122,8 @@ func generateSchemaRecursive(t reflect.Type, visited map[reflect.Type]bool) Sche Type: "object", Properties: make(map[string]*Schema), } - for field := range t.Fields() { - field := field + for i := range t.NumField() { + field := t.Field(i) if !field.IsExported() { continue diff --git a/util.go b/util.go index 74f02ede3..7bb9f48ff 100644 --- a/util.go +++ b/util.go @@ -3,10 +3,8 @@ package fantasy import "github.com/go-viper/mapstructure/v2" // Opt creates a pointer to the given value. -// -//go:fix inline func Opt[T any](v T) *T { - return new(v) + return &v } // ParseOptions parses the given options map into the provided struct. From 1f7dae5524aed4424c1f9025007ef70694dc6689 Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Thu, 2 Apr 2026 22:49:09 +0000 Subject: [PATCH 32/32] fix(anthropic): extract usage-mapping helper, add streaming usage tests --- providers/anthropic/anthropic.go | 38 +++++++------- providers/anthropic/anthropic_test.go | 71 ++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 19 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 2f05b2f12..efb79d064 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -56,6 +56,20 @@ func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlag return reqOpts } +// mapAnthropicUsage converts Anthropic SDK usage to fantasy.Usage. +// TotalTokens is computed as InputTokens + OutputTokens, which represents +// the non-cached token count. Cache tokens are tracked separately in +// CacheCreationTokens and CacheReadTokens. +func mapAnthropicUsage(u anthropic.Usage) fantasy.Usage { + return fantasy.Usage{ + InputTokens: u.InputTokens, + OutputTokens: u.OutputTokens, + TotalTokens: u.InputTokens + u.OutputTokens, + CacheCreationTokens: u.CacheCreationInputTokens, + CacheReadTokens: u.CacheReadInputTokens, + } +} + const ( // Name is the name of the Anthropic provider. Name = "anthropic" @@ -1219,14 +1233,8 @@ func (a languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas } return &fantasy.Response{ - Content: content, - Usage: fantasy.Usage{ - InputTokens: response.Usage.InputTokens, - OutputTokens: response.Usage.OutputTokens, - TotalTokens: response.Usage.InputTokens + response.Usage.OutputTokens, - CacheCreationTokens: response.Usage.CacheCreationInputTokens, - CacheReadTokens: response.Usage.CacheReadInputTokens, - }, + Content: content, + Usage: mapAnthropicUsage(response.Usage), FinishReason: mapFinishReason(string(response.StopReason)), ProviderMetadata: fantasy.ProviderMetadata{}, Warnings: warnings, @@ -1454,16 +1462,10 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S err := stream.Err() if err == nil || errors.Is(err, io.EOF) { yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeFinish, - ID: acc.ID, - FinishReason: mapFinishReason(string(acc.StopReason)), - Usage: fantasy.Usage{ - InputTokens: acc.Usage.InputTokens, - OutputTokens: acc.Usage.OutputTokens, - TotalTokens: acc.Usage.InputTokens + acc.Usage.OutputTokens, - CacheCreationTokens: acc.Usage.CacheCreationInputTokens, - CacheReadTokens: acc.Usage.CacheReadInputTokens, - }, + Type: fantasy.StreamPartTypeFinish, + ID: acc.ID, + FinishReason: mapFinishReason(string(acc.StopReason)), + Usage: mapAnthropicUsage(acc.Usage), ProviderMetadata: fantasy.ProviderMetadata{}, }) return diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 4387a34fa..b60645aad 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -504,6 +504,74 @@ func TestStream_SendsOutputConfigEffort(t *testing.T) { requireAnthropicEffort(t, call.body, EffortHigh) } +func TestMapAnthropicUsage(t *testing.T) { + t.Parallel() + + got := mapAnthropicUsage(anthropic.Usage{ + InputTokens: 200, + OutputTokens: 75, + CacheCreationInputTokens: 30, + CacheReadInputTokens: 150, + }) + + require.Equal(t, fantasy.Usage{ + InputTokens: 200, + OutputTokens: 75, + TotalTokens: 275, + CacheCreationTokens: 30, + CacheReadTokens: 150, + }, got) +} + +func TestStream_MapsUsage(t *testing.T) { + t.Parallel() + + server, calls := newAnthropicStreamingServer([]string{ + "event: message_start\n", + `data: {"type":"message_start","message":{"id":"msg_01Usage","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":200,"output_tokens":0,"cache_creation_input_tokens":30,"cache_read_input_tokens":150}}}` + "\n\n", + "event: message_delta\n", + `data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":75}}` + "\n\n", + "event: message_stop\n", + `data: {"type":"message_stop"}` + "\n\n", + }) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + }) + require.NoError(t, err) + + var finish *fantasy.StreamPart + stream(func(part fantasy.StreamPart) bool { + if part.Type == fantasy.StreamPartTypeFinish { + partCopy := part + finish = &partCopy + } + return true + }) + + _ = awaitAnthropicCall(t, calls) + + require.NotNil(t, finish) + require.Equal(t, fantasy.FinishReasonStop, finish.FinishReason) + require.Equal(t, fantasy.Usage{ + InputTokens: 200, + OutputTokens: 75, + TotalTokens: 275, + CacheCreationTokens: 30, + CacheReadTokens: 150, + }, finish.Usage) +} + type anthropicCall struct { method string path string @@ -1574,7 +1642,8 @@ func TestComputerUseToolJSON(t *testing.T) { } _, err := computerUseToolJSON(pdt) require.Error(t, err) - require.Contains(t, err.Error(), "tool_version arg is missing") }) + require.Contains(t, err.Error(), "tool_version arg is missing") + }) t.Run("returns error for unsupported version", func(t *testing.T) { t.Parallel()